2014-06-06 62 views
4

我有一個活動與一個片段列出一些數據。我已經使用SearchView實現了搜索(操作欄上的漂亮搜索字段)。如何使用android搜索管理器重置搜索

搜索工作正常,用戶輸入數據,按搜索按鈕,結果按預期過濾。

我的問題是,我不能「重置」搜索回到所有結果。我已經嘗試在searchManager對象上設置關閉和取消偵聽器,但onDismiss和oncancel方法從未被調用。

這裏是我的清單行動:

<activity 
     android:name=".ClientesActivity" 
     android:label="@string/title_activity_clientes" 
     android:parentActivityName=".MenuPrincipalActivity" 
     android:launchMode="singleTop" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="MenuPrincipalActivity" /> 
     <meta-data android:name="android.app.searchable" 
      android:resource="@xml/cliente_searchable" /> 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
    </activity> 

在ClientesActivity的方法:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    clientesService = new ClientesService(getBaseContext()); 
    setContentView(R.layout.activity_clientes); 
    if (savedInstanceState == null) { 
     getFragmentManager().beginTransaction() 
       .add(R.id.container, ClienteFragment.newInstance(), ClienteFragment.class.getSimpleName()) 
       .commit(); 
    } 
    handleIntent(getIntent()); 
} 

@Override 
protected void onNewIntent(Intent intent) { 
    setIntent(intent); 
    handleIntent(intent); 
} 

private void handleIntent(Intent intent) { 
    if(Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String query = intent.getStringExtra(SearchManager.QUERY); 
     clientesService.findByNameLike(query); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.clientes, menu); 
    SearchManager searchManager = 
      (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = 
      (SearchView) menu.findItem(R.id.action_search).getActionView(); 
    searchView.setSearchableInfo(
      searchManager.getSearchableInfo(getComponentName())); 
    searchView.setSubmitButtonEnabled(true); 
    return true; 
} 

它不顯示Listenners因爲畢竟沒有什麼工作我回滾所做的更改。 但基本上o在onCreateOptionsMenu方法的'返回true'之前添加了監聽器。 起初沒什麼奇怪的,只是匿名類重寫了onDismiss方法實現的接口,試圖在那裏放置一些日誌,並且方法從未被調用過。

+0

「重置」是什麼意思?按十字/刪除搜索區域中的所有文字? – sandrstar

+0

回到所有結果。十字架工作正常。 我已經有方法返回所有的記錄,但OnDismiss/OnCancel事件永遠不會被調用。 – Solci

+0

那確切的場景呢?你想如何回到'所有結果'?如果傳遞空字符串/ null,'clientesService.findByNameLike()'是否返回'所有結果'? – sandrstar

回答

0

看看android.widget.SearchView#setOnQueryTextFocusChangeListener。據我所知,當搜索視圖顯示時,hasFocus將爲true,並且直到用戶點擊向上/向後箭頭關閉搜索纔會再次調用false。奇怪的是,我從來沒有看到android.widget.SearchView#setOnCloseListener調用

或者,實現onOptionsItemSelected並調用android.app.Activity#onSearchRequested()來觸發搜索對話框,以便使用這些註冊的回調方法。


    @Override 
    public boolean onOptionsItemSelected(final MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.search: 
      onSearchRequested();//delegate upstream 
      break; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 

Invoking the search dialog文檔中不太清楚。我沒有看到它在文檔中聲明。但是,如果僅使用搜索小部件,則似乎不會觸發SearchManager回調。