2012-02-03 111 views
0

我在主要活動中有幾個AsyncTask類,每個類都從外部獲取少量數據,將它們存儲在內存中,然後調用主活動中用於顯示數據。我想將這些類移到他們自己的文件中,但是它們引用了主要活動的方法和變量。一種解決方案有人提到是活動的背景下通入的AsyncTask像這樣爲了調用你想要的活性的方法:來自外部類的Android調用方法通過上下文

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

這是從外部類訪問的主要活動的方法/成員的正確方法?

回答

5

它會工作,但它不是很好。顯然它不靈活,並受到未來的痛苦。

AsyncTask沒什麼特別的,只是一個類。因此,如何讓你的Activity類定義一個監聽器接口,將該監聽器傳遞給你的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

感謝您的簡單建議,我最終採用了類似的方法來彌合兩者之間的差距。 – kurifu 2012-02-13 23:22:24

+0

太棒了!從來沒有這樣做過,總是想知道如何! – wufoo 2013-03-07 19:05:48