2015-09-06 8 views
5

(同じアクティビティの)新しいインスタンスが作成されたときに古いアクティビティインスタンスを削除/削除しようとしていますが、他のすべてのアクティビティをバックスタックに維持する必要がありますFLAG_ACTIVITY_CLEAR_TOPで十分ではありません)。新しいアクティビティの開始時に古いアクティビティインスタンスを削除する

など。私は活動A、B & C.を持っていると言う。 私は始める:A - > B - > C - > B. 2番目のB活動の開始時に、私は既存のB活動を削除する必要がある。 したがって、私は今:A - > C - > Bを実行している...

助けていただければ幸いです。

+1

活動のそれぞれを開始する前に、 ')('仕上げをしてみてくださいオーバーライドしていることを行うことができると思います。 – Lal

+1

私があなたに従っている場合、finish()はアクティビティをkillするので、back-stackは現在のアクティビティが正しく実行されていますか? – ScottishUser

+0

あなたはしたいですか? – Lal

答えて

6

アクティビティを削除するのは簡単ではないので、完全な答えではないと思いますが、FLAG_ACTIVITY_REORDER_TO_FRONTを使用します。これは既存のアクティビティを強制終了するのではなく、スタックの先頭に移動します。

Intent intent = new Intent(ctx, Activity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
startActivity(intent); 

これにより、上で概説したアクティビティナビゲーションが可能になります。

私はまだ誰かが実際の活動をクリアする方法を知っている場合は興味があります。

+0

新しいインスタンスを作成するのではなく、既存のインスタンスを前面に配置しますか? 古いインスタンスを閉じて新しいインスタンスを開始する必要がある場合はどうすればよいですか? – NarendraJi

+0

私はついに上記と一緒に行きましたが、ちょっとでもハックするかもしれませんが、スタックの一番上に移動してfinish()し、古いインスタンスを強制終了して新しいものを持っているようにアクティビティを再開できますか? – ScottishUser

+0

アクティビティをまったく更新する場合は、onNewIntent()と組み合わせて使用​​する必要があります。 – zgc7009

3

Intentフラグを使用して、以前のタスクを削除できます。うまくいけば、これは役に立ちます。

Intent intent = new Intent(this, Activity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent); 

このフラグは、アクティビティの開始前にアクティビティに関連付けられていた既存のタスクをすべてクリアします。つまり、アクティビティは空のタスクの新しいルートになり、古いアクティビティはすべて終了します。

+0

A、B&Cはすべて同じタスクの下で実行されているので、上記の提案はタスクを強制終了します。本質的に、それはアプリを中止します。 – ScottishUser

+0

@ScottishUser、まあ、私は完全に疑問を誤解した。 'B 'に' singleTop'属性を使用するとどうなりますか? –

+1

singleTopは、アクティビティがタスクの先頭にある場合にのみ機能しますが、重複アクティビティは必ずしもタスクの先頭にあるわけではありません(上記のA、B、Cの例を参照)。再度、感謝します。 – ScottishUser

6

私はonNewIntent

@Override 
protected void onNewIntent(Intent intent) { 


     Bundle extras = intent.getExtras(); 
     Intent msgIntent = new Intent(this, MyActivity.class); 
     msgIntent.putExtras(extras); 
     startActivity(msgIntent); 
     finish(); 
     return; 

    super.onNewIntent(intent); 
} 

メイク・アクティビティシングルタスク

<activity 
     android:name=".MyActivity" 
     android:launchMode="singleTask" > 
    </activity> 
関連する問題