如何使用AsyncTask和fragment的进度对话框?

时间:2015-06-19 06:43:41

标签: android android-fragments android-asynctask

我想在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();
            }
        });

    }

1 个答案:

答案 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