3

我的活动导航有问题,搜索效果很好。

活动层次结构如下所示:

                              /  MyListActivityA -- ItemActivityA
MainActivity -- MyTabActivity -- MyListActivityB -- ItemActivityB
                              \  MyListActivityB -- ItemActivityC

TabActivity中的选项卡是使用带有MyListActivity的Intents创建的。

MyListActivities在清单中声明如下:

    <activity
        android:name=".views.OrderListView">
        <intent-filter>
            <action
                android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable_orders" />
    </activity>

每个MyListActivity都有自己的 SearchRecentSuggestionsProvider。

第一个解决的问题

当在任何MyListActivity上调用搜索时,我得到了MyTabActivity之外的活动。因此实现了重定向到MyTabActivity。 在MyListActivity的 onCreate() 中检查意图操作。如果它是

Intent.ACTION_SEARCH

然后启动 TabActivity 并完成当前,如下所示:

    if(Intent.ACTION_SEARCH.equals(intent.getAction())) {
        String query = intent.getStringExtra(SearchManager.QUERY);
        intent.setClass(context, MyTabActivity.class);
        intent.setAction(MyTabActivity.ACTION_SEARCH_PROXY);

        Bundle appData = intent.getBundleExtra(SearchManager.APP_DATA);

        if(appData != null) {
            intent.putExtras(appData);
        }

        intent.putExtra(Constants.ACTIVITY_TYPE, activityType);
        intent.putExtra(ActivityTabView.EXTRA_SEARCH_QUERY, query);

        context.startActivity(intent);
        context.finish();
    }

MyListActivity找到

ActivityTabView.EXTRA_SEARCH_QUERY

它在列表上进行搜索查询。并且问题解决了。

第二个解决的问题

单击“返回”按钮清除搜索查询 - 没关系。但是再次单击“返回”会显示过去的搜索。

这就是为什么我把 noHistory 放到MyTabActivity

<activity
    android:name=".views.MyTabActivity"
    android:noHistory="true">
</activity>

第三个未解决的问题

现在,例如,从MyListActivityA转到ItemActivityA并单击“返回”重定向到MainActivity。由于 noHistory 参数,我无法返回MyTabActivity 。

有没有什么好的解决方案可以分别在 TabActivity 中为选项卡中的每个活动使用 Android 搜索?

4

1 回答 1

3

我建议阅读Tasks 和 Back Stack。它让我对 android 中的活动堆栈有了更好的理解。

我的解决方案:

调用的快速搜索对话框启动调用它的活动,在本例中是 MyListActivity。这使得 TabActivity 消失,这就是为什么没有可见的 TabWidget。因此在 MyListActivity 中实现了对 MyTabActivity 的重定向(请参阅第一个解决的问题)。MyTabActivity 只是将带有搜索查询的附加内容重定向到特定的 MyListActivity。

您现在所要做的就是添加一行。在启动 MyTabActivity 的意图上设置FLAG_ACTIVITY_CLEAR_TOP标志。

if(Intent.ACTION_SEARCH.equals(intent.getAction())) {
    String query = intent.getStringExtra(SearchManager.QUERY);
    intent.setClass(context, MyTabActivity.class);
    intent.setAction(MyTabActivity.ACTION_SEARCH_PROXY);

    Bundle appData = intent.getBundleExtra(SearchManager.APP_DATA);

    if(appData != null) {
        intent.putExtras(appData);
    }

    intent.putExtra(Constants.ACTIVITY_TYPE, activityType);
    intent.putExtra(ActivityTabView.EXTRA_SEARCH_QUERY, query);

    //added line
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    context.startActivity(intent);
    context.finish();
}

然后保留正常的活动导航。

于 2011-02-25T17:12:16.320 回答