当onBackPressed不起作用时,如何关闭onOptionsItemSelected(MenuItem项)中的searchView?

时间:2017-11-14 19:49:30

标签: android android-actionbar searchview android-search

按下BACK时需要代码关闭searchView。到目前为止,只有按下BACK时关闭键盘的代码。

enter image description here

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();


   if (item.getItemId() == android.R.id.home) {

       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
       View view = this.getCurrentFocus();
       if (view != null) {
           imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }
    return super.onOptionsItemSelected(item);
     }

我尝试了以下这一行,但是这一行因为某种原因关闭了整个应用程序"返回"点击......

 onBackPressed(); 

以下行已弃用...

   MenuItemCompat.collapseActionView(menuItem);

我已经在stackOverflow上看到了一些答案,但其中大多数都与onBackPressed()或添加searchView.collapseActionView()有关。 但是我无法在onOptionsItemSelected(MenuItem item)中添加searchView,除非我使用SearchView searchView = (SearchView) item.getActionView();重新声明它,然后添加searchView.collapseActionView()但是当按下BACK时应用程序崩溃。

我关闭了键盘,但如何关闭onOptionsItemSelected(MenuItem item)中的searchView?

修改

当我使用onBackPressed()super.onBackPressed()this.onBackPressed()时,我第一次点击"返回"按钮,searchView和键盘关闭,但当我再次点击搜索图标打开searchView和键盘弹出时,如果我点击"返回"再次,整个应用程序关闭,而不是崩溃,只是关闭并带我到Android Phone主屏幕。为什么会这样?

1 个答案:

答案 0 :(得分:0)

<强>更新

 @Override
    public void onBackPressed() {
        if (!yourSearhView.isIconified()) {
            yourSearhView.onActionViewCollapsed();
        } else {
            super.onBackPressed();
        }
    }

如果您已设置app:showAsAction =“always”

,则无效