簡単な答えは他に方法がないということです。これがAndroidで行われることの意味です。唯一欠けているのは、リクエストコードをアクティビティBに渡すことです。これがないと、他のどのアクティビティが結果をアクティビティAに返したかを区別できません。
Aとは異なるアクティビティを呼び出す場合は、requestCode
アクティビティを開始するときに異なるパラメータを使用してください。さらに、同じアプローチを使用して、任意のデータをアクティビティBに戻すことができますIntent
(ほぼすべて)。
public final static int REQUEST_CODE_B = 1;
public final static int REQUEST_CODE_C = 2;
...
Intent i = new Intent(this, ActivityB.class);
i.putExtra(...); //if you need to pass parameters
startActivityForResult(i, REQUEST_CODE_B);
...
//and in another place:
Intent i = new Intent(this, ActivityC.class);
i.putExtra(...); //if you need to pass parameters
startActivityForResult(i, REQUEST_CODE_C);
次に、あなたのon ActivityResult
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode) {
case REQUEST_CODE_B:
//you just got back from activity B - deal with resultCode
//use data.getExtra(...) to retrieve the returned data
break;
case REQUEST_CODE_C:
//you just got back from activity C - deal with resultCode
break;
}
}
OnActivityResult
はGUIスレッドで実行されるため、ここで必要な更新を直接行うことができます。
最後に、アクティビティBでは、次のようになります。
Intent resultIntent = new Intent();
resultIntent.putExtra(...); // put data that you want returned to activity A
setResult(Activity.RESULT_OK, resultIntent);
finish();
結果を処理する必要がある理由がわかりませんAsyncTask
。