我有一个包含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 ???
}
}
答案 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
答案 2 :(得分:0)
您可以将TextView的实例作为参数传递给AsynkTast,并在onPostExecute中调用setText。
答案 3 :(得分:0)
在您的情况下,只需按照以下内容进行操作:
((TextView)findViewById(R.id.xyz)).setText("abc");