2014-06-06 32 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回调。