我的主要活动中有几个AsyncTask类,每个类从外部获取少量数据,将它们存储在内存中,然后调用主活动中的方法来显示数据。我想将这些类移动到他们自己的文件中,但是他们引用了主活动中的方法和变量。有人提到的一个解决方案是将活动Context传递给AsyncTask,以便调用所需的活动方法:
((ActivityName)mContext).methodYouWant(...)
((ActivityName)mContext).varYouWant
这是从外部类访问主要活动的方法/成员的正确方法吗?
答案 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*/);
}
}
}
...
}
只是一个想法。