我有一个MainActivity和一个AsyncTask MyTask。它们是独立的类。在MyTask中,我想在MainActivity中更新TextView。
如果MyTask在MainActivity的内部类中,这似乎很容易,因为我可以调用findViewById()。但现在这两个类是分开的。
所以在我的MainActivity中我这样做:
MyTask myTask=new MyTask();
Context context=this.getApplicationContext();
myTask.execute(context);
我的任务是这样的:
public class MyTask extends AsyncTask<Context, Void, Void>
{
TextView mText;
protected Void doInBackground(Context... params) {
Context context=params[0];
mText = (TextView) ((MainActivity)context).findViewById(R.id.text);
...
}
}
我知道“mText =(TextView)((MainActivity)context).findViewById(R.id.text);”是错的,但我还没有找到解决方案。
任何提示
先谢谢
答案 0 :(得分:3)
你可以这样做。如果任务不会很长,你可以忽略WeakReference:
public class MyTask extends AsyncTask<Void, Void, Void> {
private WeakReference<MainActivity> mActivity;
public MyTask(MainActivity activity) {
mActivity = new WeakReference<MainActivity>(activity);
}
public void onPostExecute(Void result) {
MainActivity activity = mActivity.get();
if (activity != null) {
TextView text = activity.findViewById(R.id.text);
}
}
}