2014-09-02 85 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