4

2つのアクティビティセットがあり、各セットに3つのアクティビティがあるとします(A1、B1、C1 || A2、B2、C2)アプリをA1から起動し、次に->B1->C1ここでC1から->A2にジャンプしますA2で押し戻すと、アプリが存在し、C1に戻らないはずです。次に、A2から->B2->C2に移動します。

つまり、基本的には開始アクティビティを変更したいのです。1つのアプリに2つのアプリがあり、2つ目のアプリに切り替えると、アクティビティスタックをクリアする必要があります。それは可能ですか?何か案は?

4

7 に答える 7

1

あなた自身の質問に答えたようです。あなたが書いた:

基本的には、開始アクティビティを変更したいのですが、1 つのアプリに 2 つのアプリがあり、2 つ目のアプリに切り替えると、アクティビティ スタックをクリアする必要があります。

私はこのようにします:

DispatcherActivityアプリケーションの起動時に起動されるアクティビティである を作成します。このアクティビティはタスクのルート アクティビティであり、依存する A1 または A2 の起動を担当し、finish()それ自体を呼び出しません (つまり、A1 または A2 によってカバーされますが、アクティビティ スタックのルートに残ります)。

A1、「戻る」キーをトラップし、DispatcherActivity に次のように終了するように指示します。

@Override
public void onBackPressed() {
    Intent intent = new Intent(this, DispatcherActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addExtra("exit", "true");
    startActivity(intent);
}

これにより、タスク スタックがルート アクティビティ ( ) までクリアされ、このインテントで が再びDispatcherActivity開始されます。DispatcherActivity

C1を起動するA2には、次の手順を実行します。

Intent intent = new Intent(this, DispatcherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addExtra("A2", "true");
startActivity(intent);

これにより、タスク スタックがルート アクティビティ ( ) までクリアされ、このインテントで が再びDispatcherActivity開始されます。DispatcherActivity

ではDispatcherActivityonCreate()次のように、インテントのエクストラに基づいて何をすべきかを決定する必要があります。

Intent intent = getIntent();
if (intent.hasExtra("exit")) {
    // User wants to exit
    finish();
} else if (intent.hasExtra("A2")) {
    // User wants to launch A2
    Intent a2Intent = new Intent(this, A2.class);
    startActivity(a2Intent);
} else {
    // Default behaviour is to launch A1
    Intent a1Intent = new Intent(this, A1.class);
    startActivity(a1Intent);
}

A2、「戻る」キーをトラップし、 DispatcherActivity に と同じオーバーライドを使用して終了するように指示しonBackPressed()ますA1

注: このコードを入力しただけなので、コンパイルしていないため、完全ではない可能性があります。あなたのマイレージは異なる場合があります ;-)

于 2012-07-11T14:52:18.230 に答える
0

この意図でアクティビティ A2 を起動してみてください -intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

于 2012-07-11T10:58:23.453 に答える
0

最後のアクティビティに戻るのではなく、戻るボタンを押したときにアプリを閉じたい場合は、戻るボタンを上書きする必要があります。アクティビティを閉じた後、上書きメソッドでfinish()メソッドを呼び出します。これがあなたに役立つことを願っています。

編集:

以下のリンクを確認してください。これは、ビュー スタック内のすべてのアクティビティを閉じるためのものです。アプリを閉じる前に、すべてのアクティビティを閉じてください。

http://www.coderzheaven.com/2011/08/27/how-to-close-all-activities-in-your-view-stack-in-android/

于 2012-07-11T10:55:05.540 に答える
0

アクティビティ A2 でボタンが押されたタイミングを確認し、[戻る] ボタンの場合はアプリを閉じることができます。A2で次の方法を使用できます

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            this.finish();
        }
        return super.onKeyDown(keyCode, event);
    }
于 2012-07-11T10:55:29.587 に答える
0

Handle this using onBackPressed and finish methods.

Before launching other activity, better you close the current activity using finish() method.

If you want to go to previous activity on back press, override onBackPressed method and call the particular intent.

In A2 activity, add finish method in onBackPressed method (dont call previous activity here). This is one of the way.

于 2012-07-11T11:00:53.960 に答える
0

Intent をアクティビティ C1 から A2 に渡しながら、次のように使用します。

Intent intent=new Intent(C1.this,A2.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

あなたのアクティビティA2で戻るボタンをオーバーライドする

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        A2.this.finish();
    }
    return super.onKeyDown(keyCode, event);
}
于 2012-07-11T11:02:59.953 に答える