gpt4 book ai didi

android - 如何使用 android SearchManager 重置搜索

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:20 25 4
gpt4 key购买 nike

我有一个带有 fragment 的 Activity 来列出一些数据。我已经使用 SearchView(操作栏上漂亮的搜索字段)实现了搜索。

搜索工作正常,用户输入数据,按下搜索按钮,结果按预期过滤。

我的问题是我无法将搜索“重置”回所有结果。我已经尝试在 searchManager 对象上设置 Dismiss 和 Cancel 监听器,但是永远不会调用 onDismiss 和 oncancel 方法。

这是我对 list 的操作:

    <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;
}

它没有显示监听器,因为我在没有任何效果后回滚了更改。但基本上 o 在 onCreateOptionsMenu 方法的“return true”之前添加了监听器。一开始没什么特别的,只是匿名类覆盖了实现了 onDismiss 方法的接口(interface),试图将一些日志放在那里,但从未调用过该方法。

最佳答案

看看 android.widget.SearchView#setOnQueryTextFocusChangeListener。据我所知,当显示 searchview 时 hasFocus 将为 true,并且在用户点击 upstack/back 箭头关闭搜索之前不会再次调用 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 回调。

关于android - 如何使用 android SearchManager 重置搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24082037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com