つのオプション:
1) "ディスパッチャー" としてMainActivity
を使用してください。 CはDを起動しようとする場合、それはこのようにそれを行う必要があります。
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("launchD", true);
startActivity(intent);
このコードMainActivity
の上にすべての活動をクリアし、onNewIntent()
はMainActivity
で呼び出されることになります。 MainActivity
で
、onNewIntent()
を上書き:スタックがクリアされた後
@Override
protected void onNewIntent(Intent intent) {
if (intent.hasExtra("launchD")) {
// Need to launch Activity D
Intent launchIntent = new Intent(this, D.class);
startActivity(launchIntent);
}
}
MainActivity
は今Dを起動します。 DでBACKを押すとMainActivity
に戻ります。いつものようにCから
2)起動D:
Intent intent = new Intent(this, D.class);
startActivity(intent);
この時点で、スタックがDでA-> B-> C-> D
ある、onBackPressed()
オーバーライド:
を
@Override
public void onBackPressed() {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
この場合、DでBACKを押すと、D、C、Bがスタックから削除され、ユーザーはMainActivity
に戻ります。
注:フラグFLAG_ACTIVITY_CLEAR_TOP
とFLAG_ACTIVITY_SINGLE_TOP
の組み合わせを使用すると、既存のインスタンスMainActivity
が確実に再利用されます。 Androidは新しいインスタンスを作成しません。
アクティビティAがMainActivityと呼ばれない場合はどうなりますか?また、あなたのために2番目の解決策もし私が活動を開始するまで仲介活動を閉じたくない場合D – Hooman
あなたは破壊したいいくつかの活動を選ぶだけではいけません.Awaywayを作成してからfinish()メソッドを別のアクティビティから削除します。これと同様に[リンク](http://stackoverflow.com/questions/10379134/finish-an-activity-from-another-activity) –