如何从公共AsyncTask获取MainActivity TextView?

时间:2012-02-28 19:53:01

标签: android android-asynctask

我有一个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);”是错的,但我还没有找到解决方案。

任何提示

先谢谢

1 个答案:

答案 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);
    }
  }
}