2012-06-15 57 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