Android 如何清除搜索结果?

Android 如何清除搜索结果?,android,Android,我在操作栏中使用SearchManager和SearchView实现了搜索功能。显示搜索视图的活动执行搜索并显示搜索结果。这很好,我可以毫无问题地从onNewIntent()获取搜索查询 当用户单击后退按钮退出搜索模式时,我需要重新显示所有项目。我如何做到这一点?我试图截取搜索管理器的OnDismiss和OnCancel以及搜索视图的OnClose。从来没有人打过电话。代码如下: @Override public boolean onCreateOptionsMenu(Menu menu) {

我在操作栏中使用SearchManager和SearchView实现了搜索功能。显示搜索视图的活动执行搜索并显示搜索结果。这很好,我可以毫无问题地从onNewIntent()获取搜索查询

当用户单击后退按钮退出搜索模式时,我需要重新显示所有项目。我如何做到这一点?我试图截取搜索管理器的OnDismiss和OnCancel以及搜索视图的OnClose。从来没有人打过电话。代码如下:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);

    // Associate searchable configuration with the SearchView
    SearchManager searchManager =
           (SearchManager) this.getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView =
            (SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setSearchableInfo(
            searchManager.getSearchableInfo(getComponentName()));

    //Try to detect end of search session. None of the listeners getting called.
    searchManager.setOnCancelListener(new OnCancelListener() {
        @Override
        public void onCancel() {//...}
    });
    searchManager.setOnDismissListener(new OnDismissListener() {
        @Override
        public void onDismiss() {//...}
    });
    searchView.setOnCloseListener(new OnCloseListener() {
        @Override
        public boolean onClose() {
            return false;
        }
    });

    return true;
}
活动的清单文件条目如下所示:

   <activity
        android:name="com.example.MainActivity"
        android:label="@string/app_name" 
        android:launchMode="singleTop">
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />

        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

我也面临同样的问题,我找到了非常简单的解决方案。如果您正在使用searchWidget(像我一样),只需执行以下操作:

    searchView.setOnCloseListener(new SearchView.OnCloseListener() {

        @Override
        public boolean onClose() {
            // Put your code here to clear and display the results
            return false;
        }

    });
因为实际上用户关闭的是SearchView,而不是SearchManager。我刚刚测试过它,它就像一个符咒

希望这对你有用

问候