18

我有一个 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.

我现在希望能够在用户是 a 时搜索图像ImageListActivity,使用 a searchable_images.xml,并在其他任何地方使用默认值。

我有一个SearchResultsImageActivity包含以下元数据元素,并在ImageListActivity.

<meta-data android:name="android.app.searchable"
    android:resource="@xml/searchable_images"/>

按 中的搜索按钮时ImageListActivity,我会从 中获取默认搜索searchable_articles.xml

如果我将 更改default_searchableSearchResultsImageActivity,则始终启动图像搜索,并且永远不会启动文章搜索。

如果我default_searchable完全删除元数据元素,并仅添加searchable元数据选定的活动,则不会启动搜索。

我很确定这应该是可能的,但我不知道我做错了什么。

4

3 回答 3

5

在您的Manifest文件中更新ImageListActivity活动标签

<activity
    android:name=".ImageListActivity"
    ...

    <meta-data
        android:name="android.app.default_searchable"
        android:value=".SearchResultsImageActivity" />
</activity>

因此,当您触发本机搜索时,ImageListActivity它将SearchResultsImageActivity为其他人调用默认搜索。

假设SearchResultsImageActivitysearchable

于 2012-07-26T00:02:23.617 回答
1

我这样做的一种方法是创建虚假活动,然后在需要时切换活动。

<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 调用意图:

于 2011-06-06T20:06:44.190 回答
0

如果您仅在该活动中覆盖搜索功能,它应该会阻止搜索调用上升到应用程序级别。返回值控制调用是否向上传播。

@Override
public boolean onSearchRequested() {
    onPromptSearch();
    return false;  // don't go ahead and show the search box
}
于 2011-09-28T18:26:09.250 回答