Android searchView setQuery不工作
我正在使用andriod中的搜索界面,并按照android指南设置了该界面 我创建了一个SearchableActivity,它将处理用户输入和搜索结果 现在我遇到了一个问题,当用户在Android searchView setQuery不工作,android,Android,我正在使用andriod中的搜索界面,并按照android指南设置了该界面 我创建了一个SearchableActivity,它将处理用户输入和搜索结果 现在我遇到了一个问题,当用户在SearchView中输入一些内容并点击搜索键时,搜索请求将被提交,然后我将接收查询字符串并进行搜索,但此时,SearchView中的文本已更改为默认的SearchHit值,而我希望它是查询字符串 因此我尝试使用searchView.setQuery(query,false),但它不工作,有什么问题吗 核心活动代码
SearchView
中输入一些内容并点击搜索键时,搜索请求将被提交,然后我将接收查询字符串并进行搜索,但此时,SearchView
中的文本已更改为默认的SearchHit
值,而我希望它是查询字符串
因此我尝试使用searchView.setQuery(query,false)代码>,但它不工作,有什么问题吗
核心活动代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_activity_layout);
Log.d("map", "create");
handleIntent(getIntent());
}
public void onNewIntent(Intent intent) {
setIntent(intent);
handleIntent(intent);
}
private void handleIntent(Intent intent) {
Log.d("map", "handleIntent");
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
//try search
Log.d("map", "search and set query:" + query);
searchView.setQuery(query, false); // reset the value in of the SearchView
}
}
AndroidManifest.xml文件:
<activity
android:name=".ui.MapActivity"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
似乎当接收到带有Actionintent.Action\u SEARCH
的intent时,将调用以下方法:
handleIntent();
onCreateOptionsMenu();
而handlecontent
将在oncreateoptions菜单
之前运行
同时,人们习惯于在oncreateoptions菜单上设置searchView
这意味着选项菜单将重新充气,并且将重新构建搜索视图
,然后手册内容
中的所有设置将不起作用
我想这就是原因
如果我错了,请随时纠正我。我建议您将设置延迟到下一个事件循环(将其添加到消息队列),因此代码可能如下所示:
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
final String query = intent.getStringExtra(SearchManager.QUERY);
searchView.post(new Runnable() {
@Override
public void run() {
// Important! Make sure searchView has been initialized
// and referenced to the correct (current) SearchView.
// Config changes (e.g. screen rotation) may make the
// variable value null.
searchView.setQuery(query, false);
}
};
}
}
这不管用
mSearchView.setQuery(mKeyword, true);
MenuItemCompat.expandActionView(mMenuSearch);
确实如此
MenuItemCompat.expandActionView(mMenuSearch);
mSearchView.setQuery(mKeyword, true);
似乎只有在您扩展了“动作”视图后,它才会记住它。
我使用MenuItemCompat只是为了向后兼容需要将代码放入带有MenuItemCompat的后期处理程序中
inflater.inflate(R.menu.menu_my_team, menu);
// search manager integration for search widget
SearchManager searchManager = (SearchManager) getActivity()
.getSystemService(Context.SEARCH_SERVICE);
final MenuItem searchMenuItem = menu.findItem(R.id.action_search);
// MenuItem helpTutorialMenuItem = menu.findItem(R.id.action_help);
mSearchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
mSearchView.setSearchableInfo(searchManager
.getSearchableInfo(getActivity().getComponentName()));
mSearchView.setQueryHint("Search by");
if (!TextUtils.isEmpty(queryText)) {
mSearchView.post(new Runnable() {
@Override
public void run() {
MenuItemCompat.expandActionView(searchMenuItem);
mSearchView.setQuery(queryText, false);
}
});
}
mSearchView.clearFocus();
在我的例子中,它不起作用,因为我所在的碎片不再附着在窗口上。将它移到上面我在新搜索结果片段中交换的位置,修复了它。你解决了问题吗。甚至我也在同一点上敲了一下。mSearchView.onActionViewExpanded();mSearchView.setQuery(“,true);为meShould工作时,应拉取菜单项compat.expandActionView(searchMenuItem)代码>未运行并在发布前添加。这一直对我有效,但我注意到它不是在我正在测试的牛轧糖设备上。工作完美它看起来有潜力,但我仍然无法将它设置为菜单中初始化的搜索视图
@jorgamvf在膨胀后,是否将搜索视图
字段设置为创建的菜单?可能在oncreateoptions菜单中
。基本上,这就是我正在使用的@fikr4n,现在我将您的作品添加到handlecontent()
中,它被触发onNewIntent
。由于SearchView
是在OnCreateOptions菜单()中初始化的,SearchView
可以在声明的帮助下在外部捕获,但是当触发文本更改时,应用程序失败。在我的例子中,我可以在写入时为适配器设置一个过滤器,并且可以初始化TextView
并将转录的语音搜索传递给它,但无法从语音更新查询。