私のアプリケーションの一部には、次のようなアクティビティの構造があります。
Activity A
は、各プロセスまたはフローの後に戻ってくるホームアクティビティです。Activity B
は単純な確認アクティビティです。Activity C
は、別の確認アクティビティです。Activity D
はいくつかのプロセスを実行し、最終的に結果を私のホームアクティビティ(Activity A
)に戻します。
Activity B
およびC
:
finish()
が呼び出され、何も実行されません。finish()
を呼び出しますstartActivityForResult()
の使用を考えていましたが、複数のアクティビティを介して結果を渡すためにこれを使用したことはありません。
また、_handler
(Activity A
で作成)を渡して、Activity A
でいくつかのメソッドを呼び出し、Activity D
で実行することも考えていました...
どのように実装できますか?
インテントフラグFLAG_ACTIVITY_FORWARD_RESULTを使用したい場合があります Intent
アクティビティBおよびCを開始するとき
public static final int FLAG_ACTIVITY_FORWARD_RESULT
以降:APIレベル1
設定され、このインテントが既存のアクティビティから新しいアクティビティを起動するために使用されている場合、既存のアクティビティの返信ターゲットは新しいアクティビティに転送されます。このようにして、新しいアクティビティは
setResult(int)
を呼び出し、その結果を元のアクティビティの返信ターゲットに送り返すことができます。
そうすれば、AはDから送り返されたエクストラで送り返されたデータをすべて受け取るはずです。
うん、素晴らしいフォーマット。また、アクティビティA、B、Cのそれぞれから確実にstartActivityForResult()
を呼び出すことができます(おそらくそうする必要があります)(すぐにfinish()
を呼び出さないでください)。 BとCでは、成功した結果とfinish()
を確認して、結果をAに返します。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if((resultCode == RESULT_OK) && (requestCode == MY_RESULT_CODE)) {
setResult(RESULT_OK, data);
finish();
}
}
関係なくBとCを消したい場合は、代わりに次のようにします。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
setResult(resultCode, data);
finish();
}
私はこれが本当に古い質問であることを知っていますが、有効な解決策を取り入れ、onNewIntent()
を使用してonActivityResult()
として扱いたいと思っていました。
アクティビティDでは、意図を次のように構成します
Intent intent = new Intent(yourContext, Activity_A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("someName", data);
startActivity(intent);
finish();
その後、Activity_A
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// update your UI
intent.getSerializableExtra(...
}