如何从AsyncTask活动设置textview的文本?

时间:2013-08-14 14:42:44

标签: android android-asynctask textview

我有一个包含textview的Fragment Activity和另一个扩展AsyncTask的类。现在我想使用onPostExecute(String result)方法在我的片段活动中的textview中设置结果文本。

我该怎么做?我已经为AsyncTask类创建了一个自定义构造函数,它接受一个上下文对象。我该如何使用?

这就是我在Fragment活动中创建任务对象的方法:

String query = "someText";
Task task = new Task(this.getActivity());
task.execute(query);

这是我的任务类的片段:

public class Task extends AsyncTask<String, Void, String> {

    private Context context;

    public Task (Context context) {
        this.context = context;
    }

    protected void onPostExecute(String result) {
    super.onPostExecute(result);
    // ??? What comes here ???
    }
}

4 个答案:

答案 0 :(得分:5)

TextView txt = (TextView)((Activity)context).findViewById(R.id.watheveryouwant);
txt.setText("blabla");

但是你应该传递一个Activity而不是一个Context,会更容易; - )

或者

    public Task (Context context, TextView t) {
        this.context = context;
        this.t = t;
    }
   super.onPostExecute(result);
        t.setText("BlahBlah")
    }

应该做的伎俩

答案 1 :(得分:0)

我从

中选择了解决方案

How do I return a boolean from AsyncTask?

new Task(getActivity()).execute(query);

AsyncTask

的构造函数中
TheInterface listener;
public Task(Context context)
{
  listener = (TheInterface) context; 
}

接口

public interface TheInterface {

public void theMethod(String result); // your result type

 }

然后

在你的doInbackground中返回结果。

在你的onPostExecute

if (listener != null) 
{
  listener.theMethod(result); // result is the String
  // result returned in doInbackground 
  // result of doInbackground computation is a parameter to onPostExecute 
}

在您的活动类或片段中实现接口

public class ActivityName implements Task.TheInterface

然后

@Override
 public void theMethodString result) { 
    tv.setText(result); 
    // set the text to textview here with the result of background computation
    // remember to declare textview as a class member.
 }

编辑:

您还缺少onPostExecute

的@Override注释

答案 2 :(得分:0)

您可以将TextView的实例作为参数传递给AsynkTast,并在onPostExecute中调用setText。

答案 3 :(得分:0)

在您的情况下,只需按照以下内容进行操作:

((TextView)findViewById(R.id.xyz)).setText("abc");