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)の後、この手順を数回繰り返し、そのたびに最終結果をテキストビューに投稿します。それは私がそれらをに入れる必要があることを意味すると思いますAsyncTask、しかしそれはそれをさらに難しくします(どこonActivityResultに置くべきですか?)。

4

1 に答える 1

23

簡単な答えは他に方法がないということです。これがAndroidで行われることの意味です。唯一欠けているのは、リクエストコードをアクティビティBに渡すことです。これがないと、他のどのアクティビティが結果をアクティビティAに返したかを区別できません。

Aとは異なるアクティビティを呼び出す場合は、requestCodeアクティビティを開始するときに異なるパラメータを使用してください。さらに、同じアプローチを使用して、任意のデータをアクティビティBに戻すことができますIntent(ほぼすべて)。

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 に答える