如何检测SearchView的后退按钮?

bdr*_*tan 15 android android-layout searchview android-search

我正在使用单个活动来显示SearchView以及显示搜索结果.搜索结果只是项目的子集,因此搜索充当过滤器.一切似乎都运行正常,但是当我点击SearchView的后退按钮时,我无法弄清楚如何恢复视图中的所有项目.

或者可能有另一种方法可以检测用户何时从搜索结果导航到上一个视图(在我的情况下,是同一个视图).

谢谢

Dar*_*ind 38

因此,查看问题的标题,您不确定如何检测何时SearchView关闭,因此当您的视图SearchView不再打开时,您无法将视图恢复到"正常"状态.

Android 4.0+以上的过时解决方案

的(简单的)解决方案是增加一个:SearchView.OnCloseListener给你的SearchView,就像这样:

SearchView.setOnCloseListener(new SearchView.OnCloseListener() {
    @Override
    public boolean onClose() {
        // This is where you can be notified when the `SearchView` is closed
        // and change your views you see fit.
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑:

适用于Android 4.0+的更新解决方案

显然这OnCloseListener是错误的,并不适用于较新版本的Android(4.0+).请参阅:https://code.google.com/p/android/issues/detail?id = 25758

解决方案是使用以下支持库版本SearchView:

onCreateOptionsMenu看起来像这样:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);

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

    MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            Toast.makeText(ScrollingActivity.this, "onMenuItemActionExpand called", Toast.LENGTH_SHORT).show();
            return true;
        }

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            Toast.makeText(ScrollingActivity.this, "onMenutItemActionCollapse called", Toast.LENGTH_SHORT).show();
            return true;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

至于为什么谷歌甚至不打算在我不知道的文档中写评论,但这很难过.

编辑2:

只需在评论中添加@MateiRadu添加的链接:

如何在android中处理Search View的后退按钮

这也显示了如何使用OnActionExpandListener而不是OnCloseListener.

希望这可以帮助.


Zha*_*har 6

这里的所有代码都已弃用!你应该使用这样的东西。

final MenuItem item = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) item.getActionView();

item.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {

            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                Toast.makeText(getActivity(), "onMenuItemActionExpand called", Toast.LENGTH_SHORT).show();
                return true;
            }

            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                Toast.makeText(getActivity(), "onMenutItemActionCollapse called", Toast.LENGTH_SHORT).show();
                return true;
            }
        });
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助。