简单的答案是,没有别的办法。这是如何在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