我想在ProgressDialog
中使用Fragment
作为AsyncTask
。使用Activity
,以下代码可以正常运行,但Fragment
没有。
public class ResultTask extends AsyncTask<String, Void, Report> {
private ProgressDialog pDialog;
private Context context;
public ResultTask(Context context) {
super();
this.context = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(context);
pDialog.setMessage("Loading...");
pDialog.show();
}
@Override
protected Report doInBackground(String... params) {
//myLong operation
}
@Override
protected void onPostExecute(Report report) {
pDialog.dismiss();
super.onPostExecute(report);
}
}
我如何以一种非常简单的方式修复? ProgressBar
的想法只是为了让用户了解长时间的操作。
更新
这是片段的代码,我执行AsyncTask:
ResultTask task = new ResultTask(getActivity());
Report report = task.execute("paramenters").get();
这是Activity的代码,我在其中选择Fragment:
private void changeActivity(Button button, final Fragment fragment) {
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, fragment).commit();
}
});
}
答案 0 :(得分:1)
如果对AsyncTask使用.get()而不是在那里等待,直到结果没有到达,在任务运行时,UI线程将被填充。 使用.execute并使用处理程序与任务进行通信。 在这种情况下,您不需要处理程序,因为onPre和onPost方法与UI相关,但doInBackGround不是:)
http://developer.android.com/reference/android/os/AsyncTask.html#get()
文章: http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html