簡體   English   中英

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

[英]android: makes activity A wait for activity B to finish and returns some values

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

  1. Activity A ,做一些工作
  2. 啟動Activity BWebView ),讓用戶填寫一些信息,然后收集結果
  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應放在哪里?)。

簡單的答案是沒有別的辦法。 這就是在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來處理結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM