私は同じような質問が既に何度も聞かれていましたが、私の知り合いは少し違います。 たとえば、A(ルートアクティビティ)-B-C-D-E(AはBを起動し、BはCなどを起動します)のようなアクティビティツリーを持っています。また、私はFとGのアクティビティを起動できる2つのボタンを持っています。それらはどこでも利用できます(メニューとそのlaunchMode = "singleTask"のようなものです)アクティビティスタックブランチを作成してクリアします
BCDまたはEから「特別な」アクティビティの1つが呼び出された場合、 「あなたは本当に予約プロセスを台無しにしたいですか?」のようなテキストが表示されます。ユーザーが「はい」をクリックするとアクティビティが「G」に変わり、アクティビティスタックからB C DとEアクティビティをクリアし、「戻る」ボタンを押すとアクティビティA(GがFから呼び出された場合はF)に戻ります。
フラグ "Intent.FLAG_ACTIVITY_CLEAR_TOP"を設定することでこれを行うことができましたが、GアクティビティがB/C/D/Eアクティビティのいずれかから呼び出されたかどうかを何らかの形で判断する必要があるため不適切です。そうでない場合(つまり、AまたはFアクティビティから呼び出されたという意味です)、戻るボタンはいつものように動作するはずです。
私はすでに試しました: マニフェストファイルを介してブロードキャストレシピ - 別のものからのB C D Eアクティビティで "finish()"を呼び出そうとしました。これらのうちの1つがすでにGCによって削除されている可能性があるため、少しばかげています。
"getCallingActivity()"メソッド。それを動作させることができませんでした。 "launchMode =" singleTask "が指定されているため、呼び出し元のアクティビティがB/C/D/Eのいずれかであるかどうかを比較したい場合は
" startActivityForResult(intent、result) " - 動作していません(onActivityResultが呼び出されていません) FとGの活動のための私のマニフェストファイルに。
私はまた、BCDEツリー用の新しいタスクを作ってみました。しかし、それも起動メニューの2番目のタスクとして表示されていることを実現しています。
を私は本当にすべてに感謝します助けても、理論的に。
申し訳ありません:
FとG活動における一つの方法を上書きすることで、私は必要な結果を達成しました!私の記憶は私を欺いた。 "onResultReceived"と言って、私は "OnActivityResult"を意味しました。 結果を送信するアクティビティが "launchMode = singleTask"または "singleInstance"を使用している場合、このメソッドは呼び出されません。 あなたのソリューションはうまくいかないでしょう。 – Ruzard