【问题标题】:android: makes activity A wait for activity B to finish and returns some valuesandroid:使活动A等待活动B完成并返回一些值
【发布时间】:2012-06-15 08:01:59
【问题描述】:

我有一个程序需要...

  1. Activity A,做一些工作
  2. 启动Activity B(一个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 放在哪里?)。

【问题讨论】:

    标签: java android android-activity


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。 AsynchTask 很难描述,但我认为你的回复就足够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多