2016-09-01 14 views
0

私は、2つのアクティビティを持つ活動Aと活動B.午前の活動Aだから活動B.活動 - Androidの

を開始

、いくつかの相互作用後の活性スタックは次のようになります - > B - > A - > B.

問題: アクティビティB(スタックの最後のB)からスタックの最初のアクティビティAに移動する必要があります。私はFLAG_CLEAR_TOPとIntent.FLAG_ACTIVITY_NEW_TASKを同じものを達成するために使用しています。

今、アクティビティA(スタック位置3)はアクティビティBから表示されますが、戻るボタンを押すとアクティビティB(スタック位置2)が既に表示されていますスタック)。

どのようにこの問題を解決できますか?

PS:アクティビティAとBのlaunchMode singleInstanceとsingleTaskを使用しようとしましたが、その解決策は私のアプリケーションでは機能しません。

ありがとうございます。

+0

どのように最初のアクティビティBから2番目のアクティビティAに移動しますか? – 0xDEADC0DE

+0

Intent.FLAG_ACTIVITY_NEW_TASKを使用して2番目のアクティビティAに移動中 – user198530

+1

FLAG_ACTIVITY_NEW_TASKを削除すると、すでに問題は解決されている可能性がありますが、わかりません。最初のアクティビティBで「終了」を呼び出してそのアクティビティを終了するのはなぜですか?その後、自動的にAに戻ります。これは最初のAです – 0xDEADC0DE

答えて

0

Intent intent = new Intent (activity_a.this, activity_b.class); 
startActivity(intent); 
finish(); 
0

のようなのactivitesが可能であれば活動の複数のインスタンスを作成しないように切り替えた後finish();を追加します。 Androidは、同じActivityの複数のインスタンスがスタックにある場合、スタック内のActivityの特定のインスタンスを特定(および返却)できるようには設計されていません。

アプリケーションによっては、問題を解決するさまざまな方法があります。

<activity-alias>を使用すると、既存のActivityの実装を別の名前で再利用することができます。

もう1つの方法は、元のコードをそのまま継承した別のActivityクラスを作成して、まったく同じコードで異なる名前を持つ2つのクラスを持つようにすることです。

最善の方法は、いつでも各Activityのインスタンスが1つだけ存在するようにアプリケーションを再構築することです。これを行うには、Intent.FLAG_ACTIVITY_REORDER_TO_FRONTを使用してタスクスタックを再配置します。

関連する問題