从外部类到上下文的Android调用方法

时间:2012-02-03 00:01:40

标签: java android android-context

我的主要活动中有几个AsyncTask类,每个类从外部获取少量数据,将它们存储在内存中,然后调用主活动中的方法来显示数据。我想将这些类移动到他们自己的文件中,但是他们引用了主活动中的方法和变量。有人提到的一个解决方案是将活动Context传递给AsyncTask,以便调用所需的活动方法:

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

这是从外部类访问主要活动的方法/成员的正确方法吗?

1 个答案:

答案 0 :(得分: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*/);
             }
         }
     }
 ...
 }

只是一个想法。