1

Android AsyncTask のonPostExecute()メソッドからアクティビティのメソッドにアクセスする必要があるという問題があります

私は2つのアクティビティを持っており、どちらも以下のような共通のメソッドを含んでいます:

(1) Activity1 --> refreshUI()
(2) Activity2 --> refreshUI()

呼び出しアクティビティを引数として受け取る呼び出しAsyncTaskが1 つありましたGetDataAsyncTask(Activity a )

activity1 から new を呼び出しますGetDataAsyncTask(Activity1.this).execute
上記と同じように、私の activity2 から new を呼び出しますGetDataAsyncTask(Activity2.this).execute

私の AsyncTask は以下の通りです:

public class GetDataAsyncTask extends AsyncTask<String ,Void , String> {
    public Activity context;

    public PostAsyncTaskHelper(Activity c) { 
        context = c; 
    }

    protected String doInBackground(String... arg0) {
        // Webservice calls 
    }

    protected void onPostExecute(String result) {
        if(result.equals("qq")) {
            //Where I am not able to access refreshUI() 
            //method of any one of my activities
            context.refreshUI()  
        }
    }
}

から呼び出されたアクティビティの参照を取得する方法を教えてもらえますAsyncTaskか?

4

3 に答える 3

5

メソッドinterfaceを持つrefreshUI()を作成し、それを Activity1 と Activity2 の両方に実装します。context次に、インターフェイスの型に型キャストするだけです。

また、構成の変更 (画面の回転など) の場合、破棄された Activity インスタンスを保持することになるため、 Activityfrom 内の fromへの参照を保持することに注意する必要があります。詳細については、こちらを参照してください。これに対応するソリューションの例も参照してください。AsyncTask

于 2012-08-08T20:05:14.493 に答える
2

アクティビティのインターフェースを定義する

public interface MyActivityRefreshInterface
{
 public void refreshUI();
}

アクティビティは として定義する必要がありますimplements MyActivityRefreshInterface

onPostExecute は、コンテキストを (MyActivityRefreshInterface)context としてキャストできます。

于 2012-08-08T20:07:25.633 に答える
1

refreshUI は Activity のメソッドではないためです。これは、Android の Activity クラスではなく、特定の Activity1 および Activity 2 クラスにあります。Activity1 と Activity2 が、refreshUI メソッドを持つ BaseActivity から継承し、AsyncTask のコンテキストを BaseActivity としてマークするようにリファクタリングする必要があります。

于 2012-08-08T20:07:03.100 に答える