簡單的答案是,沒有別的辦法。這是如何在Android中完成的。唯一的事情,我相信,你缺少的是傳遞一個激活碼,活動B.沒有它,你將無法區分如果您是在調用不同的哪些其他的活動返回結果的活動A.
從一個活動,開始活動時使用不同的參數requestCode
。此外,您還可以通過任何數據傳回使用相同Intent
方法活性B(好吧,幾乎所有的):
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
處理結果。
感謝您的答覆。 AsynchTask很難描述,但我認爲你的回答就足夠了。 – Tyrone