2012-02-03 18 views
0

主なアクティビティにいくつかのAsyncTaskクラスがあり、それぞれが少量の外部データを取り出してメモリに格納し、メインアクティビティのメソッドを呼び出して表示しますデータ。これらのクラスを独自のファイルに移動したいのですが、主なアクティビティからメソッドと変数を参照しています。誰かが言及した一つの解決策は、あなたがしたいアクティビティメソッドを呼び出すためにそのようAsyncTaskに活動コンテキストを渡すことだった:外部クラスからコンテキストを経由したAndroidの呼び出しメソッド

((ActivityName)mContext).methodYouWant(...) 
((ActivityName)mContext).varYouWant 

が、これは外部のクラスからの主な活動の方法/メンバーにアクセスするための正しい方法です?

答えて

5

それはうまくいくが、それは素晴らしいことではない。明らかに、それは柔軟性がなく、将来の痛みの対象となります。

AsyncTaskは特別なものではなく、ただのクラスです。 AsyncTaskのコンストラクタにそのリスナを渡して、リスナを後で呼び出すことはどうですか?

public class MyActivity extends Activity { 
    public interface AsyncTaskCompleteListener { 
     public void onComplete(/* any data you want to share */); 
    } 

    ... 

    private AsyncTaskCompleteListener myListener = new ...() { 
     // do stuff with data 
    } 

    private MyAsyncTask extends AsyncTask<Something,Something,Something> { 

     private AsyncTaskCompleteListener listener = null; 
     public MyAsyncTask(AsyncTaskCompleteListener listener) { 
      this.listener = listener; 
     } 

     protected void onPostExecute(Something result) { 
      if(listener != null) { 
       listener.onComplete(/*params*/); 
      } 
     } 
    } 
... 
} 

ちょっと考えました。

+0

シンプルな提案をありがとう、私は2つの間のギャップを埋めるために同様のアプローチを使用して終了しました。 – kurifu

+0

すごい!以前はこれをやったことはありませんでした。 – wufoo

関連する問題