如何清除搜索结果?

时间:2014-09-02 16:42:56

标签: android

我已在操作栏中使用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>

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我发现解决方案非常简单。如果您使用searchWidget(像我一样),您只需要这样做:

    searchView.setOnCloseListener(new SearchView.OnCloseListener() {

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

    });

因为实际上用户正在关闭的是SearchView,而不是SearchManager。我只是测试它,它就像一个魅力!

希望这适合你。

此致