14

を閉じるには、戻るボタンを 2 回押す必要がありSearchViewます。なんで?最初のプレスでは、SearchViewフォーカスを失うだけです...

設定setOnKeyListenerSearchView効かない…

ところで、私は ABS 実装を使用しています...

私のコードは単純で、次のようになります。

mMenuItemSearch = menu.findItem(R.id.search);
mSearchView = new SearchView(getSupportActionBar().getThemedContext());
mMenuItemSearch.setActionView(mSearchView);

mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
{
    public boolean onQueryTextChange(String newText)
    {
        mPagerManager.getFragment(mSelectedPos).adapter.getFilter().filter(newText);
        return true;
    }

    public boolean onQueryTextSubmit(String query)
    {
        return true;
    }
});
4

11 に答える 11

3

いろいろ試した結果、解決策が見つかりました。

onQueryTextSubmit(String query)書き込み中searchView.clearFocus();

次に、onBackPressed()以下のコードを使用します。

        if (!searchView.isIconified())
        {
            searchView.setIconified(true);
            searchView.onActionViewCollapsed();
        }
        else
        {
            super.onBackPressed();
        }
于 2016-12-09T08:21:24.697 に答える
0

私はこのように解決しました:

...
public class MyFragment extends Fragment implemented SearchView.OnFocusChangeListener    <----
...

@Override
public void onFocusChange(View v, boolean hasFocus) {
    MenuItem menuItem = menu.findItem(R.id.action_search);
    SearchView sv = (SearchView)MenuItemCompat.getActionView(menuItem);
    if(!hasFocus) {
        sv.onActionViewCollapsed();   <----
        interactionListener.showDrawerToggle(true);    <----
    }
}

...

public void configureSearchView(Menu menu) {
    this.menu = menu;
    MenuItem menuItem = menu.findItem(R.id.action_search);
    SearchView sv = (SearchView)MenuItemCompat.getActionView(menuItem);
    sv.setOnSearchClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            interactionListener.showDrawerToggle(false);
        }
    });

    sv.setOnQueryTextListener(this);
    sv.setOnCloseListener(this);
    sv.setSubmitButtonEnabled(false);
    sv.setIconifiedByDefault(true);
    sv.setOnQueryTextFocusChangeListener(this);     <----

    if(initialQuery != null) {
        sv.setIconified(false);
        menuItem.expandActionView();
        sv.setQuery(initialQuery, true);
    }
}
...
于 2015-05-31T19:12:45.707 に答える
0

これを修正する唯一の方法は、android.support.v7.widget.SearchView代わりに使用することですandroid.widget.SearchView

こうすることで治りました。

于 2017-01-04T10:30:15.603 に答える
0

検索ボタンがクリックされた後 の呼び出しclearFocus()メソッドが必要です。 例えば:SearchView

mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String query) {
        mSearchView.clearFocus();
        //...
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        return false;
    }
});
于 2017-12-28T09:49:41.520 に答える
0

configureSearchView() メソッドでこれを試してみてください。私にとってはうまくいきます。

    mSearchView.post(new Runnable() {
        @Override
        public void run() {
            mSearchView.setIconified(false);
        }
    });
于 2016-01-28T07:50:47.403 に答える
0

あなたSearchViewが私のようなフラグメントにある場合は、 Kotlinで次のスニペットを使用してください

searchView.setOnQueryTextFocusChangeListener { _, hasFocus ->
      if(!hasFocus){

         // iconify the SearchView when the focus is lost
         searchView.isIconified = true
      }
 }

@vikoo の回答に感謝します。

于 2019-07-29T13:01:59.673 に答える