2014-09-02 94 views
0

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

我面临同样的问题,我找到了解决方案,它是相当简单的。如果您使用的是searchWidget(像我一样),你只需要做到这一点:

searchView.setOnCloseListener(new SearchView.OnCloseListener() { 

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

    }); 

因为其实什么是用户关闭是搜索查看,而不是SearchManager的。我只是测试它,它就像一个魅力!

希望这对你有用。

Regards