android - 如何检测 SearchView 后退按钮按下?

标签 android android-layout searchview android-search

我使用单个 Activity 来显示 SearchView 以及显示搜索结果。搜索结果只是项目的一个子集,因此搜索充当过滤器。一切似乎都工作正常,只是我不知道如何在单击 SearchView 的后退按钮时恢复 View 中的所有项目。

或者也许有另一种方法可以检测用户何时从搜索结果导航到上一个 View (在我的例子中,是同一个 View )。

谢谢

最佳答案

所以看看你的问题的标题,你不确定如何检测 SearchView 何时关闭,因此你无法将你的 View 恢复到“正常”状态当 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.
    }
});

编辑:

适用于 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;
        }
    });
}

至于为什么谷歌甚至懒得在文档中写评论我不知道,但很遗憾。

EDIT2:

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

how to handle back button of Search View in android

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

希望这对您有所帮助。

关于android - 如何检测 SearchView 后退按钮按下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37039511/

相关文章:

android - 无法获取额外属性的compileSdkVersion属性?

android - 在没有 ActionBarSherlock 的情况下更改 SearchView 中的光标颜色

Java String TRIM 函数不起作用

Android - 查看 wifi 密码是否正确

android - 'adb devices' 显示虚拟设备

android - 来自 viewPager 的 fragment 隐藏在操作栏的选项卡后面

android - ViewPager 上未触发 OnLongClickListener

java - 显示图像 动态查看

android - Nullpointerexception 仅在已签名的 APK 中

android - Unresolved reference : search_src_text