[英]Two searchable.xml activities in one AndroidManifest.xml
我有一个Android应用程序,它有一些不同的活动,用于浏览从RSS下载的文章和图像。
我希望能够使用searchable.xml
文件将搜索按钮连接到“搜索”对话框 。 我通过一次搜索设法做到了这一点,使用:
<activity android:name=".search.SearchResultsActivity"
android:label="@string/search_results_activity_title" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable_articles"/>
</activity>
并在<application />
<meta-data android:name="android.app.default_searchable"
android:value=".search.SearchResultsActivity" />
我现在可以从任何活动启动“搜索”对话框,并启动SearchResultsActivity
。
我现在希望能够在用户是ImageListActivity
时使用searchable_images.xml
,并在其他任何地方使用默认值。
我有一个SearchResultsImageActivity
,它包含以下元数据元素,并在ImageListActivity
使用相同的元素。
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable_images"/>
按下ImageListActivity
的搜索按钮,我从searchable_articles.xml
获取默认searchable_articles.xml
。
如果我将default_searchable
更改为SearchResultsImageActivity
,则始终启动图像搜索,并且永远不会启动文章搜索。
如果我完全删除default_searchable
元数据元素,并仅添加searchable
元数据,则不会启动任何搜索。
我很确定这应该是可能的,但我不知道我做错了什么。
在您的Manifest
文件中更新ImageListActivity
活动标记
<activity
android:name=".ImageListActivity"
...
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchResultsImageActivity" />
</activity>
因此,当您在ImageListActivity
触发本机搜索时,它将调用SearchResultsImageActivity
并为其他人调用默认值。
假设SearchResultsImageActivity
是searchable
。
我这样做的一种方法是创建假活动,然后在需要时切换活动。
<activity android:name="activitySearchMain" />
<activity android:name="activitySearchSub1">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.ALTERNATIVE" />
<category android:name="android.intent.category.SELECTED_ALTERNATIVE" />
<data android:scheme="user" />
</intent-filter>
</activity>
<activity android:name="activitySearchSub2">
<intent-filter>
<action android:name="com.sample.twitter.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.ALTERNATIVE" />
<category android:name="android.intent.category.SELECTED_ALTERNATIVE" />
<data android:scheme="user" />
</intent-filter>
</activity>
创建两个为子活动命名的类。
然后在单击组件时创建这样的意图...
Intent sourceIntent = getIntent();
Intent newIntent = new Intent(this, activitySearchSub2.class);
newIntent.setAction(activitySearchSub2.ACTION2);
newIntent.setData(sourceIntent.getData());
startActivity(newIntent);
finish();
并在单击按钮或单击其他组件时从onClick调用意图:
如果您仅在该活动中覆盖搜索功能,则应阻止搜索调用上升到应用程序级别。 返回值控制呼叫是否向上传播。
@Override
public boolean onSearchRequested() {
onPromptSearch();
return false; // don't go ahead and show the search box
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.