SearchView 未向结果发送意图 activity
SearchView not sending intent to result activity
我有一个 SearchView
似乎不起作用。 SearchView
显示在菜单栏中,我可以输入文本。但是,当我单击 phone 屏幕键盘上的搜索图标时,什么也没有发生。理想情况下,这将启动一个新的 activity,并发送要使用的查询字符串。我试图实现 SearchView.setOnSearchClickListener
方法来处理点击,但是当我这样做时,只要我点击搜索图标输入文本,结果 activity 就会加载,没有参数。任何帮助查明我可能做错了什么的人都将不胜感激。
我在 Activity:
中创建了这样的菜单
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>
我还将此添加到 activity 的清单中,搜索显示:
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>
这是搜索结果的定义activity:
<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..." />
编辑 - 问题与可能的重复问题不同。本应接收 Intent 的 activity 根本不会启动。
在你的onCreateOptionsMenu()
中:
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Intent intent = new Intent(MainActivity.this, SearchActivity.class);
intent.putExtra("searchTerm", query);
startActivity(intent);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
确保在搜索视图中实施 setOnQueryTextListener
以及您在 onQueryTextSubmit()
方法中所需的操作
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;
}
比 implements SearchView.OnQueryTextListener
更适合您的 activity 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;
}
});
即使在实施 onQueryTextSubmit
之后,问题仍然存在。经过一天的问题搜索后,我终于意识到清单文件中的 activity 定义不正确 <action android:name="android.intent.action.SEARCH"/>
意图过滤器。
在显示 SearchView 的 activity 中,您需要更改
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>
到
<meta-data
android:name="android.app.default_searchable"
android:value="ActivitySearchResults" />
您必须使 "searchResultActivity" 可搜索。在清单文件中的 activity(具有搜索视图)中添加以下代码。
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchResultActivity" />
我有一个 SearchView
似乎不起作用。 SearchView
显示在菜单栏中,我可以输入文本。但是,当我单击 phone 屏幕键盘上的搜索图标时,什么也没有发生。理想情况下,这将启动一个新的 activity,并发送要使用的查询字符串。我试图实现 SearchView.setOnSearchClickListener
方法来处理点击,但是当我这样做时,只要我点击搜索图标输入文本,结果 activity 就会加载,没有参数。任何帮助查明我可能做错了什么的人都将不胜感激。
我在 Activity:
中创建了这样的菜单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>
我还将此添加到 activity 的清单中,搜索显示:
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>
这是搜索结果的定义activity:
<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..." />
编辑 - 问题与可能的重复问题不同。本应接收 Intent 的 activity 根本不会启动。
在你的onCreateOptionsMenu()
中:
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Intent intent = new Intent(MainActivity.this, SearchActivity.class);
intent.putExtra("searchTerm", query);
startActivity(intent);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
确保在搜索视图中实施 setOnQueryTextListener
以及您在 onQueryTextSubmit()
方法中所需的操作
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;
}
比 implements SearchView.OnQueryTextListener
更适合您的 activity 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;
}
});
即使在实施 onQueryTextSubmit
之后,问题仍然存在。经过一天的问题搜索后,我终于意识到清单文件中的 activity 定义不正确 <action android:name="android.intent.action.SEARCH"/>
意图过滤器。
在显示 SearchView 的 activity 中,您需要更改
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>
到
<meta-data
android:name="android.app.default_searchable"
android:value="ActivitySearchResults" />
您必须使 "searchResultActivity" 可搜索。在清单文件中的 activity(具有搜索视图)中添加以下代码。
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchResultActivity" />