2011-09-12 6 views
0

私は同じような質問が既に何度も聞かれていましたが、私の知り合いは少し違います。 たとえば、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番目のタスクとして表示されていることを実現しています。

を私は本当にすべてに感謝します助けても、理論的に。

答えて

0

私はputExtra()を使用してこの問題を解決しました。私はB、C、D、EからストリングをFとGのアクティビティに渡しました。 FとGがお互いから呼び出され、Aが何も渡されなかったとき。

@Override 
public void onBackPressed() { 
    if (passedString != null) { 
     final Intent a = new Intent(this, A.class); 
     a.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(a); 
    } 
    super.onBackPressed(); 
} 
1

私はonResultReceivedが何であるかわからないが、試してみる:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, 
      Intent intent){ 
super.onActivityResult(requestCode, resultCode, intent); 

...etc... 

} 

intent.putExtra() ... 1つのアクティビティから別のアクティビティに情報を取得するために使用してください。それを戻すには、this.setResult(int, intent)を「最上位」のアクティビティ内で使用してください。あなたがそれを最初まで吹き飛ばしたいのであれば、このための旗もあります。FLAG_ACTIVITY_FORWARD_RESULT。私は、これが結果を捕らえなければならないと考えて、次の最も低いアクティビティに再び転送することは間違っている可能性があります。

+0

申し訳ありません:

FとG活動における一つの方法を上書きすることで、私は必要な結果を達成しました!私の記憶は私を欺いた。 "onResultReceived"と言って、私は "OnActivityResult"を意味しました。 結果を送信するアクティビティが "launchMode = singleTask"または "singleInstance"を使用している場合、このメソッドは呼び出されません。 あなたのソリューションはうまくいかないでしょう。 – Ruzard

関連する問題