我正在尝试将SearchView小部件实现到我的应用程序中。
问题:当我按搜索时,我的Searchable活动永远不会启动以显示结果。由于某种原因,SearchView小部件未链接到结果活动。
以下是相关代码:
的AndroidManifest.xml
<!--ACTIVITY WITH SEARCHVIEW WIDGET-->
<activity
android:name=".activity.LocationManagerActivity"
android:label="@string/title_activity_location_manager" >
<meta-data
android:name="android.app.default_searchable"
android:value=".activity.LocationManagerResultsActivity" />
</activity>
<!--ACTIVITY TO DISPLAY RESULTS-->
<activity
android:name=".activity.LocationManagerResultsActivity"
android:launchMode="singleTop"
android:label="@string/title_activity_location_manager_results" >
<intent-filter>
<action android:name="android.intent.action.search" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
LocationManagerActivity.class
public class LocationManagerActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location_manager);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_location_manager, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.location_manager_menu_search));
ComponentName componentName = new ComponentName(this, LocationManagerResultsActivity.class);
searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName));
return true;
}
}
LocationManagerResultsActivity.class
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location_manager_results);
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleIntent(intent);
}
private void handleIntent(Intent intent) {
Toast.makeText(this, "have intent", Toast.LENGTH_SHORT);
if(intent.getAction().equals(Intent.ACTION_SEARCH)) {
String query = intent.getStringExtra(SearchManager.QUERY);
doSearch(query);
}
}
LocationManagerActivity SearchActivity实际上永远不会创建LocationManagerResultsActivity。
我已经完成了所有其他问题所能找到的一切
default_searchable
添加到基本活动android.app.searchable
和@xml/searchable
添加到可搜索的活动getComponentName()
以获取可搜索活动的组件名称换句话说,我可以在搜索栏中输入内容,但是当我按下搜索时,没有任何反应。
我做错了什么?
答案 0 :(得分:0)
问题是我没有正确地将搜索意图过滤器的名称大写。
过去是什么:
<intent-filter>
<action android:name="android.intent.action.search" />
</intent-filter>
现在:
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
这解决了我所有的问题。