简单的答案是没有其他办法。这就是在 Android 中的意义所在。我相信,您唯一缺少的是将请求代码传递给活动 B。没有它,您将无法区分哪些其他活动将结果返回给活动 A。
如果您从 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
处理结果。