4

我有一个活动处理搜索(ACTIVITY_1),当我在此活动中/从该活动中使用搜索(通过手机上的 SEARCH 按钮)时,它可以完美运行。

但是,当我通过实现查询字符串并将其转发到我的 Search_Activity.class (ACTIVITY_1)来使用另一个活动( ACTIVITY_2..x )的搜索时onNewIntent

@Override
protected void onNewIntent(Intent intent) {
    Log.i(TAG, "onNewIntent()");

    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        Log.i(TAG, "===== Intent: ACTION_SEARCH =====");
        Intent myIntent = new Intent(getBaseContext(), Search_Activity.class);
        myIntent.setAction(Intent.ACTION_SEARCH);
        myIntent.putExtra(SearchManager.QUERY, intent.getStringExtra(SearchManager.QUERY));
        startActivity(myIntent);
    }

}

它总是先暂停ACTIVITY_2,然后转到ACTIVITY_2的 onCreate() 。

  • 为什么它已经存在并且不直接转到 onNewIntent 时重新创建我的ACTIVITY_2 ?
  • 还有其他方法可以将搜索查询直接转发到ACTIVITY_1吗?例如通过 Manifest.xml 中的设置
  • 是否可以将所有搜索查询自动转发到ACTIVITY_1,甚至无需onNewIntent在所有其他活动中实施?

目前,我必须<intent-filter>在每个活动中放置一个以“激活”我的自定义搜索,然后将查询转发到通过 处理搜索的活动onNewIntent(如上所示)。

<activity android:name=".Another_Activity"
    android:theme="@style/MyTheme">
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <meta-data android:name="android.app.searchable"
        android:resource="@xml/searchable" />
</activity>
4

1 回答 1

11

我不确定我是否理解您描述的事件链,但是如果 ACTIVITY_1 是用户按下“搜索”时您始终希望从所有其他活动启动的搜索活动,那么您需要如何配置应用程序按钮。

假设搜索按钮在 Activity1 上完美运行,您只需向应用程序添加一些粘合元数据,告诉它您的所有其他活动都应该使用 ACTIVITY_1 进行搜索,如下面的清单片段所示:

<application>
  <meta-data 
     android:name="android.app.default_searchable"
     android:value=".ACTIVITY_1" />

   <!-- All your activities, service, etc. -->

</application>

使用它,您应该能够从除 ACTIVITY_1 之外的所有内容中删除意图过滤器,并且您不需要onNewIntent在任何其他活动中使用该处理程序。

于 2009-12-15T19:11:19.283 回答