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

时间:2015-07-23 17:49:29

标签: java android searchview

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

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

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

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

但没效果。

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

设置搜索视图:

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);
}

1 个答案:

答案 0 :(得分:2)

以下代码工作:

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

searchView.setOnCloseListener(new OnCloseListener() {
    @Override
    public bool OnClose() {
        searchView.clearFocus();
        return true;
});

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

我在here下面找到了解决方法:

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) {

    }
});

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