私が持っている5つの活動、アンドロイドクリア中東活動
は- ベースの活動
B、C、D - 通常の活動
E - 最終活動
ABCDE
I AからBへCからDへ、Dは私をEに連れて行きます。私は行動が欲しいです:もし私がDのボタンを押すとCに連れて行かなければなりません。 DからアクティビティEに移動しました。私はバックボタンをEからBに、CとDをスキップする必要があります。
私が持っている5つの活動、アンドロイドクリア中東活動
は- ベースの活動
B、C、D - 通常の活動
E - 最終活動
ABCDE
I AからBへCからDへ、Dは私をEに連れて行きます。私は行動が欲しいです:もし私がDのボタンを押すとCに連れて行かなければなりません。 DからアクティビティEに移動しました。私はバックボタンをEからBに、CとDをスキップする必要があります。
E
で:
finish()
の)
finishAffinity()
を呼び出すことで、この活動のいずれかですべてこのグループを終えることができるようになります
@Override
public void onBackPressed() {
Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) | FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
これはB
、C
、D
とE
を終え、A
に戻ります。
FLAG_ACTIVITY_SINGLE_TOP
を使用すると、A
という既存のインスタンスに確実に戻ることができます。 A
の既存のインスタンスも終了して新しいインスタンスを作成したい場合は、単にFLAG_ACTIVITY_SINGLE_TOP
を削除してください。
ありがとうございます。これはまさに私が探していたものです –
あなたが出ているアクティビティを追跡するために静的変数を使用できます。その後、onBackPressedをオーバーライドしてその変数をチェックし、適切なアクティビティに移動します。次のようなものがあります。
public static Boolean skipActivities = false;
DからDを開始すると、それをtrueに設定します。
@Override
public void onBackPressed() {
if (skipActivities){
//start activity A, skipActivities should be reset to false also
} else {
super.onBackPressed();
}
}
これに 'static'変数を使用するのは間違った方法です。これは悪いアーキテクチャです。 OPが望んでいるものを正確に行う簡単な 'Intent'フラグがあります。恐ろしい答えです。 –
することができます "グループ" あなたの活動、affinity
を使用して:あなたの活動のEの場合。 したがって、マニフェストファイルでアクティビティB、C、D、Eにandroid:taskAffinity="activity.normal"
を追加します。
@Override
public void onBackPressed() {
finishAffinity();
super.onBackPressed();
}
この目的のために 'taskAffinity'を使うことはまったく間違っています。それだけでなく、この機能はAPIレベル16以上に存在します。マニフェストのさまざまなアクティビティで異なる 'taskAffinity'を指定すると、アプリケーションの2つのタスクがすぐに終了します。これは確かにあなたが望むものでもなく、ユーザーが期待するものでもありません。これを実行する前に完全に理解する必要があるワームの大きな缶が開きます。 OPが望むものを正確に行うための単純な「Intent」フラグがあり、APIレベル1以上で動作します。 –
ありがとう!そのような旗について知らなかった! –
アクティビティEで[onBackPressed](https://developer.android.com/reference/android/app/Activity.html#onBackPressed())をオーバーライドしてAに移動しようとしましたか? –