12

我有一个程序需要...

  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
    ...
}

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

另外,在上面的步骤 (3) 之后,我将多次重复此步骤,每次都将最终结果发布到 textview。我认为这意味着我需要将它们放入 中AsyncTask,但这使它变得更加困难(应该onActivityResult放在哪里?)。

4

1 回答 1

23

简单的答案是没有其他办法。这就是在 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处理结果。

于 2012-06-15T08:10:13.693 回答