我有一个需要......
的程序Activity A
中,做一些工作Activity B
(一个WebView
),让用户填写一些信息,然后收集结果目前我这样设置:
在Activity A
:
...
startActivityForResult(this, new Intent(ActivityB.class));
...
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
...
//get result from data, do something with it
...
}
这似乎是一种尴尬的方法,因为我需要将任务分成许多不同的部分。我需要处理所有部分抛出的异常,这样做很不方便。有更好的方法吗?
此外,在上面的步骤(3)之后,我将重复此步骤几次,每次都将最终结果发布到textview。我认为这意味着我需要将它们放入AsyncTask
,但这会让它变得更加困难(onActivityResult
应放在哪里?)。
答案 0 :(得分:15)
简单的答案是没有别的办法。这就是在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
来处理结果。