设置搜索小部件后退按钮功能

ita*_*ied 6 java android searchview

search widget在我navigation drawer的应用程序中实现了Android .我已将其设置为打开键盘并editText在单击搜索图标时对焦.我想设置后退按钮(向上按钮)来隐藏键盘.我在网上搜索了R.id向上按钮,发现了这个android.R.id.home.所以我把它设置为:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    ...
    case android.R.id.home:
        hideKeyboard();
        break;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我调试了代码并注意到点击navigation bar图标会激活android.R.id.home,但点击搜索小部件的向上按钮甚至都不会进入该onOptionsItemSelected(MenuItem item)功能.我也试过这个:

searchView.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            hideKeyboard();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

但没有奏效.

按下后(向上)按钮时如何隐藏键盘?

设置搜索视图:

private void setSearchView(Menu menu) {
    // Get the SearchView and set the searchable configuration
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchView = (SearchView) menu.findItem(R.id.search).getActionView();
    // Assumes current activity is the searchable activity
    searchView.setSearchableInfo(searchManager
            .getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false);

    SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
        public boolean onQueryTextChange(String newText) {
            Home.getFilter().filter(newText);
            return true;
        }

        public boolean onQueryTextSubmit(String query) {
            return true;
        }
    };
    searchView.setOnQueryTextListener(queryTextListener);
}
Run Code Online (Sandbox Code Playgroud)

Yha*_*oer 2

以下代码应该可以工作:

searchView = (SearchView) menu.findItem(R.id.search).getActionView();

searchView.setOnCloseListener(new OnCloseListener() {
    @Override
    public bool OnClose() {
        searchView.clearFocus();
        return true;
});
Run Code Online (Sandbox Code Playgroud)

然而,由于某种原因,这对我不起作用。:-/

我在这里找到了以下解决方法:

searchView = (SearchView) menu.findItem(R.id.search).getActionView();

searchView.addOnAttachStateChangeListener(new OnAttachStateChangeListener() {

    @Override
    public void onViewDetachedFromWindow(View v) {
        searchView.clearFocus();
    }

    @Override
    public void onViewAttachedToWindow(View v) {
        
    }
});
Run Code Online (Sandbox Code Playgroud)

我认为 using 不会android.R.id.home起作用,因为我认为onOptionsItemSelected(android.R.id.home)只有在 SearchView 关闭后才会调用它。