一个 AndroidManifest.xml 中包含两个 searchable.xml 活动

发布于 2024-09-27 17:34:17 字数 1441 浏览 6 评论 0原文

我有一个 Android 应用程序,其中有一些不同的活动用于浏览从 RSS 下载的文章和图像。

我希望能够提供连接

<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>

中,

<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 中获取默认搜索。

如果我将 default_searchable 更改为 SearchResultsImageActivity,则始终启动图像搜索,而永远不会启动文章搜索。

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

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

I have an Android app which has a few different activities for browsing articles and images downloaded from RSS.

I'd like to be able to offer to hook up the search button to the Search dialog, using the a searchable.xml file. I've managed to do this with one search, using:

<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>

and in the <application />

<meta-data android:name="android.app.default_searchable"
    android:value=".search.SearchResultsActivity" />

I can now launch the Search dialog from any activity, and it launches the SearchResultsActivity.

I would now like to be able to search for images when the user is an ImageListActivity, using a searchable_images.xml, and use the default everywhere else.

I have a SearchResultsImageActivity which includes the following meta-data element, and used the same element in the ImageListActivity.

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

On pressing the search button in the ImageListActivity, I get the default search from searchable_articles.xml.

If I change the default_searchable to SearchResultsImageActivity, the image search is always launched, and the article search is never launched.

If I remove the default_searchable meta-data element altogether, and add searchable meta-data only selected activities, no search is launched.

I'm fairly sure this should be possible, but I don't know what I'm doing wrong.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

栖竹 2024-10-04 17:34:17

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

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

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

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

假设 SearchResultsImageActivity可搜索

In your Manifest file update the ImageListActivity activity tag

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

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

So when you will trigger native search in ImageListActivity it will invoke the SearchResultsImageActivity and default one for others.

Assuming SearchResultsImageActivity is searchable.

静水深流 2024-10-04 17:34:17

我这样做的一种方法是创建假活动,然后在需要时关闭这些活动。

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

One way I did this was to create fake activities then switch out the activities when you need them.

<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>

Create two class that are named for the sub activities.

then create intents like this when component is clicked...

Intent sourceIntent = getIntent();
Intent newIntent = new Intent(this, activitySearchSub2.class);
newIntent.setAction(activitySearchSub2.ACTION2);
newIntent.setData(sourceIntent.getData());
startActivity(newIntent);
finish();

and call the intents from onClick when a button is clicked or some other component is click:

深海不蓝 2024-10-04 17:34:17

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

@Override
public boolean onSearchRequested() {
    onPromptSearch();
    return false;  // don't go ahead and show the search box
}

If you override the search function in just that activity, it should prevent the search call from going up to the application level. The return value controls if the call is propagated up.

@Override
public boolean onSearchRequested() {
    onPromptSearch();
    return false;  // don't go ahead and show the search box
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文