私があなたを正しく理解していれば、同じアクティビティが N 個あり、スタック内の任意の開始点アクティビティに戻りたいと言っているのですか?
「スティッキー」アクティビティの前にあるすべてのアクティビティを終了する必要があることを事前に知っているのか、それとも途中で決定されるのかは完全にはわかりません
アクティビティが重複している場合に N 個のアクティビティをスタックからポップする恣意的な方法は知りませんが、(未完成のコード) などの独自のロールを作成できます
A(M) が次のアクティビティを起動する前にスティッキーになることが事前にわかっている場合は、フラグを渡して新しいタスクを起動したら、それ自体を強制終了する必要があることを各フォワード アクティビティに伝えることができます。チェーンの最後のアクティビティが終了すると、A(M) に戻ります
in A(...)
startSelf()
{
Intent I = new Intent(this,MyActivity.class);
if (bFinishSelf || bFinishForward)
I.putExtra("finishself", 1);
if (Finishelf)
finish();
startActivity(I);
in ... all A(...) onCreate( ...
Bundle b = getIntent().getExtras();
if(b !=null && extras.getInt("finishself");
bFinishSelf = true;
次に、新しいアクティビティを開始するときに、finishself フラグが設定されているかどうかを確認し、設定されている場合は、新しいアクティビティを開始した後に finish() を呼び出します...
一方、 A(z) が A(...) に戻る必要があると判断するものである場合、 A(z) では、呼び出し元の親に、到達するまで自分自身を殺す必要があることを伝えることができると思いますデータに含まれる何らかの ID ...
A(M) startActivityForResult(...)
A(Z) どういうわけか、A(M) をスティッキー アクティビティにする必要があると判断します ...
finshAndStopAt(int ID) {
Intent I = new Intent();
I.putExtra("finish",ID);
if (getParent() == null) {
setResult(Activity.RESULT_OK, I);
} else {
getParent().setResult(Activity.RESULT_OK, I);
}
finish();
}
すべての A(z ... m) (親の) は戻りデータを監視します
@Override void onActivityResult(int requestCode, int resultCode, Intent data) {
// If we are asked to finish ourselves, pass it on ...
if (null != data && data.getInt("finish",stopAt) != myID) {
if (getParent() == null) {
setResult(Activity.RESULT_OK, data);
} else {
getParent().setResult(Activity.RESULT_OK, data);
finish();
}
// else we can hang around and are the sticky activity
}
ちょっと面倒だし、誰かがもっと簡単な方法を知っているかもしれません