Android SearchView未向结果活动发送意图
我有一个Android SearchView未向结果活动发送意图,android,android-intent,searchview,Android,Android Intent,Searchview,我有一个SearchView似乎不起作用。SearchView显示在菜单栏中,我可以输入文本。但是,当我点击手机屏幕键盘上的搜索图标时,什么也没发生。理想情况下,这将启动一个新的活动,发送一个要使用的查询字符串。我试图实现SearchView.setOnSearchClickListener方法来处理单击操作,但是当我这样做时,只要单击搜索图标输入文本,结果活动就会加载,不带任何参数。如果能帮我查明我可能做错了什么,我将不胜感激 我在“活动”中创建了如下菜单: public boolean on
SearchView
似乎不起作用。SearchView
显示在菜单栏中,我可以输入文本。但是,当我点击手机屏幕键盘上的搜索图标时,什么也没发生。理想情况下,这将启动一个新的活动,发送一个要使用的查询字符串。我试图实现SearchView.setOnSearchClickListener
方法来处理单击操作,但是当我这样做时,只要单击搜索图标输入文本,结果活动就会加载,不带任何参数。如果能帮我查明我可能做错了什么,我将不胜感激
我在“活动”中创建了如下菜单:
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.convert:
...
return true;
default:
return super.onOptionsItemSelected(item);
}
}
以及用于搜索的xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/search"
android:title="@string/search"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="always"
android:actionViewClass="android.support.v7.widget.SearchView"
app:actionViewClass="android.support.v7.widget.SearchView"/>
<item android:id="@+id/convert"
android:title="@string/dlconvert" />
</menu>
我还将其添加到活动的清单中,其中搜索显示:
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>
这是搜索结果活动的定义:
<activity android:name=".ActivitySearchResults">
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>
<intent-filter>
<action android:name="android.intent.action.SEARCH"/>
</intent-filter>
</activity>
searchable.xml文件仅包含:
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="Search..." />
编辑-问题与可能的重复问题不同。本应接收意图的活动根本不会启动。在您的
onCreateOptions菜单()
中:
确保在搜索视图上实现
setOnQueryTextListener
以及您在onquerytexsubmit()
方法中所需的操作
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
//Log.e("onQueryTextChange", "called");
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
// start acitivy here
return false;
}
});
return true;
}试试看
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search_menu, menu);
MenuItem item = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(this);
SearchView.SearchAutoComplete searchAutoComplete = searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
searchAutoComplete.setHintTextColor(Color.GRAY);
searchAutoComplete.setTextColor(Color.BLACK);
return true;
}
然后将SearchView.OnQueryTextListener
实现到您的活动ans覆盖方法
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Intent intent = new Intent(Activity.this, SearchActivity.class);
intent.putExtra("query", query);
startActivity(intent);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
即使在实现了onquerytexsubmit之后,问题仍然存在。搜索问题一天后,我终于意识到清单文件中不正确的活动定义中有
意图过滤器。在显示SearchView的活动中,您需要更改
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchResultActivity" />
到
您必须使“searchResultActivity”可搜索。在清单文件中的活动(具有searchview)中添加以下代码
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchResultActivity" />
您是否解决了问题?@Prem我解决了,谢谢。当搜索结果活动是您的主要活动,并且您不希望其他活动显示结果时,此答案就是解决方案。即使是android文档也没有涵盖这一点。谢谢@Goku
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchResultActivity" />