android:make activity A等待活动B完成并返回一些值

Tyr*_*one 6 java android android-activity

我有一个需要...的程序

  1. Activity A,做一些工作
  2. 启动Activity B(a WebView),让用户填写一些信息,然后收集结果
  3. 然后最后处理数据

目前我这样设置:

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
    ...
}
Run Code Online (Sandbox Code Playgroud)

这似乎是一种尴尬的方法,因为我需要将任务分成许多不同的部分.我需要处理所有部分抛出的异常,这样做很不方便.有更好的方法吗?

此外,在上面的步骤(3)之后,我将重复此步骤几次,每次将最终结果发布到textview.我认为这意味着我需要把它们放进去AsyncTask,但这会让它变得更加困难(应该onActivityResult放在哪里?).

Ale*_*s G 18

简单的答案是没有别的办法.这就是在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);
Run Code Online (Sandbox Code Playgroud)

然后在你的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

OnActivityResult 在GUI线程上执行,因此您可以在此处直接进行任何更新.

最后,在活动B中,您将拥有:

Intent resultIntent = new Intent();
resultIntent.putExtra(...);  // put data that you want returned to activity A
setResult(Activity.RESULT_OK, resultIntent);
finish();
Run Code Online (Sandbox Code Playgroud)

我不确定你为什么需要AsyncTask处理结果.