2016-11-12 4 views
0

私は、ナビゲーションアクティビティであるMainActivity(A)を持つアプリケーションを作っています。そのアクティビティはアクティビティ(B)を開始でき、そこからアクティビティ(C)にナビゲートできます。それから私がアクティビティ(D)に移動するとき、私はMainActivity(A)を除くすべてのアクティビティを終了したいと思います。だから本質的に私が活動(A)から戻ると、私は同じ活動(A)に行くでしょう。MainActivityと新しいアクティビティの間のすべてのアクティビティの終了

したがって本質的にA> B> Cであり、(D)が起動されるとスタックはA> Dです。

答えて

0

setFlagsメソッドを使用して、このインテントにFLAG_ACTIVITY_CLEAR_TOPを付けます。

これは、MainActivityのインスタンスが既に存在するかどうかを確認し、それがある場合は、そのアクティビティを前面に表示し、その上にあるすべてのアクティビティをクリアします。MainActivityを再起動し、スタック。

他の方法は、手動ですべてのactivity.Likeでフィニッシュ()を呼び出している:

Intent intent = new Intent(this, NextActivity.class); 
startActivity(intent); 
finish(); 
+0

アクティビティAがMainActivityと呼ばれない場合はどうなりますか?また、あなたのために2番目の解決策もし私が活動を開始するまで仲介活動を閉じたくない場合D – Hooman

+0

あなたは破壊したいいくつかの活動を選ぶだけではいけません.Awaywayを作成してからfinish()メソッドを別のアクティビティから削除します。これと同様に[リンク](http://stackoverflow.com/questions/10379134/finish-an-activity-from-another-activity) –

0

つのオプション:

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_TOPFLAG_ACTIVITY_SINGLE_TOPの組み合わせを使用すると、既存のインスタンスMainActivityが確実に再利用されます。 Androidは新しいインスタンスを作成しません。

関連する問題