2017-01-18 2 views
1

以前のすべてのアクティビティをこの現在のタスクでのみクリアすることはできますか? ので、活動の私のスタックは、次のようになります。このタスクの以前のすべてのアクティビティをクリアすることはできますか?

A - B - (NEW_TASK) - C - D - E 

は、いくつかのフラグとEを起動することが可能です:

両方の活動現在のタスクでCとD(以前のすべての活動を削除します
A - B - (NEW_TASK) - C - D - (SOME_FLAG) - E 

)ので、アクティビティEで[戻る]をクリックすると、新しいタスクが開始された場所(アクティビティB)に戻ります。 E活動を開始した後、バックスタックは次のようにする必要があります:

A - B - E 
+0

非常に良い質問を行うには をしようとしている場合、このHTTPについて前の回答を見てくださいスローされること 注意.com/questions/5001882/how-to-clear-specific-activity-from-the-stack-history – W4R10CK

+1

@ W4R10CKはい、現在私は全く同じソリューションを使用しています。しかし、これはあまり良い回避策ではありません。 EとBの間にたくさんの活動があり、既に破壊されている場合は、活動結果をさらに伝えるために再開されます。 – diesersamat

+0

成功したら、これを把握しようとしています。 – W4R10CK

答えて

0

あなたがfinish()を呼び出すことによってActivityをクリアすることができます。 onBackPressed()を無効にし、intentを使用してEからB Activityに移動します。

0

FLAG_ACTIVITY_CLEAR_TOP

設定した場合、および起動され活動がすでにます 現在のタスクで実行して、その後、代わりにそれの上にその 活動の新しいインスタンス、他の活動のすべてを立ち上げています このインテントは、新しいインテントとして という古いアクティビティに配信されます。例えば

、活動からなるタスクを考慮する:A、B、C、D Dは活性Bの 成分に解決を意図してstartActivity()を呼び出す場合、C及びDは、完成したであろうそしてBがあることになりましたスタックで、その結果、与えられたテント を受信:A、Bの

上記の例では、アクティビティBの現在実行中のインスタンスを使用すると、その onNewIntent(ここに開始され、新たな意図を のいずれか受け取ります)メソッドを呼び出すか、新しい インテントで終了して再起動します。起動モードが「マルチプル」( のデフォルト)と宣言されていて、同じ インテントにFLAG_ACTIVITY_SINGLE_TOPを設定していない場合は、完了して再作成されます。他のすべての起動の場合は モード、またはFLAG_ACTIVITY_SINGLE_TOPが設定されている場合、このインテントは現在のインスタンスのonNewIntent()に配信される になります。

この起動モードが FLAG_ACTIVITY_NEW_TASKと一緒に良い効果にも使用することができます使用はタスクのルートアクティビティを開始する場合は、 それは フォアグラウンドにそのタスクの現在実行中のインスタンスを持参して、明確になりますそれを根本的な状態にします。特に は、通知 の通知からアクティビティを起動するときなどに便利です。

0

あなたのユースケースを達成するために非常に多くの方法

可能なウェイ1を持っている:あなたは、C、Dから活動を開始し、結果Eに基づいて、あなたが活動C、Dを完了するために管理することができstartActivityForResultメソッドを使用することができます onActivityResult()の

可能な方法2:あなたはbackstack上の活動を維持したくない場合は、 あなたは活動C、Dは、彼らが別の

可能な方法3を開始した後にすることを終了することができます:あなたがすることができますIntを使用するENTフラグを使用すると、さらにあなたの情報 あなたはすべてのあなたの以前の活動を終了する活動でfinishAffinity()タスクを使用することができるため

を助けが必要な場合は、私に教えてくださいbackstack

を操作します。 同じアフィニティを持つ現在のタスクのアクティビティとその直下のすべてのアクティビティを終了します。 これは、アプリケーションが別のタスク(それが理解できるコンテンツタイプのACTION_VIEWから など)への起動が可能なときに使用される通常は であり、ユーザ は現在のタスクからスイッチオーバーを使用しており、 自分の仕事。この場合、ユーザが第2のアプリケーションの他のアクティビティを にナビゲートした場合、そのすべてがタスクスイッチの一部として元のタスクから削除されるべきである( )。 // stackoverflowの:この仕上げは、前のアクティビティに結果 を提供することはできません。また、例外はあなたがそう

関連する問題