3

アクティビティのナビゲーションに問題があります。検索はうまくいきます。

アクティビティ階層は次のようになります。

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

TabActivityのタブは、MyListActivityでインテントを使用して作成されます

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

リストに検索クエリを作成します。そして問題は解決しました。

2番目に解決された問題

[戻る] ボタンをクリックすると、検索クエリがクリアされます。問題ありません。しかし、もう一度「戻る」をクリックすると、過去の検索が表示されます。

そのため、 noHistory をMyTabActivityに追加しました:

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

3 つ目の未解決の問題

たとえば、MyListActivityAからItemActivityAに移動して [戻る] をクリックすると、 MainActivity にリダイレクトされますnoHistory パラメータのため、 MyTabActivityに戻ることができません。

タブ内の各アクティビティに対してそれぞれ TabActivity で Android 検索を使用するための良い解決策はありますか?

4

1 に答える 1

3

Tasks と Back Stackを読むことをお勧めします。Android のアクティビティ スタックについての理解が深まりました。

私の解決策:

呼び出されたクイック検索ダイアログは、それが呼び出されたアクティビティを開始します。この例では、MyListActivity です。これにより、TabActivity が消えます。そのため、TabWidget が表示されません。そのため、MyListActivity には MyTabActivity へのリダイレクトが実装されています (「最初に解決された問題」を参照)。MyTabActivity は、特定の MyListActivity へのインテントに含まれる検索クエリを使用して、エクストラをリダイレクトするだけです。

あとは、1 行追加するだけです。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 に答える