2012-06-15 80 views
4

我需要一个程序...安卓:使活性的等待活动B完成并返回一些值

  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放?)。

回答

13

简单的答案是,没有别的办法。这是如何在Android中完成的。唯一的事情,我相信,你缺少的是传递一个激活码,活动B.没有它,你将无法区分如果您是在调用不同的哪些其他的活动返回结果的活动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处理结果。

+0

感谢您的答复。 AsynchTask很难描述,但我认为你的回答就足够了。 – Tyrone