1

(アクティビティグループとタブが廃止されたことを知っています。現時点ではアプリを再設計できないため、可能であれば現在の設計で完成させたいと思います。)

A、B、Cの3つのタブを持つTabActivityがあります。タブCは、C1とC2の2つの子アクティビティを持つActivityGroupです。C2は常にC1から呼び出され、C1ビューを設定してC1インテントを再起動することで終了します。これはすべて正常に機能します。私の問題は、ユーザーがC2アクティビティ中にAまたはBタブを選択した場合、C2アクティビティをキャンセルしたいということです。次にCタブを選択すると、C1アクティビティが表示されます。ユーザーがアプリケーションを終了して再入力した場合も同じです。

OnTabChangeListener()を実装したので、新しいタブがいつ選択されたかがわかり、C2タブがアクティブであるか(またはタブが変更される前であったか)さえわかります。私の質問は、C2アクティビティをキャンセルして、[C]タブを選択すると、以前にアクティブだったC2タブに戻るのではなく、デフォルトのC1アクティビティが開始されるようにする方法です。

4

2 に答える 2

1

そのために放送の送信者と受信者を使うことができると思います。一時停止中に、ブロードキャストレシーバーを作成します。他の場所からもc2を終了したい場合は、ブロードキャストを送信することで簡単に実行できるため、これを提案しています。このコードを使用してください:

BroadcastReceiver broadcast_receiver = null; // DECLARE IT IN YOUR CLASS.

// WRITE BELOW CODE IN onPause OF C2 ACTIVITY.
broadcast_receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("finish_c2")) {
            unregisterReceiver(broadcast_receiver);
            finish();
        }
    }
};
    registerReceiver(broadcast_receiver, new IntentFilter("finish_c2"));

アクティビティを終了するには、任意の場所からブロードキャストを送信するだけです。

//WRITE THE BELOW CODE WHERE YOU WANT TO FINISH C2 ACTIVITY.
Intent intent = new Intent("finish_c2");
sendBroadcast(intent);

問題が発生したかどうかを尋ねるのに役立つことを願っています。

于 2012-05-15T05:36:47.483 に答える
0

単純に、タブCでonPause()を使用して、c2からc1に戻すために使用したのと同じコードでオーバーライドできます。onPause()その特定のタブから出たときにのみ呼び出されるため、アクティビティグループはバックグラウンドで復元され、そのタブCに戻ると、最初にC1が表示されます。

于 2012-05-15T05:25:00.870 に答える