主要活动中的AsyncTasks如何显示进度dailogue

时间:2013-08-21 03:47:31

标签: android android-asynctask progressdialog oncreate

我的Mainactivty Oncreate()方法中有3个异步任务当用户打开应用程序时我想在加载3个asynctasks时显示进度对话框。 请说明我从哪里开始并驳回进程对话。 如有任何样品请提供链接。 谢谢。

5 个答案:

答案 0 :(得分:2)

实际上你得到了代码怎么做。此外,我建议您在调用AsyncTask之前必须创建并显示进度对话框。由于你有3个AsyncTasks,如果从服务器获取内容,你根本不能说哪个是最后一个任务。如果你有这样的情况,那么在每个任务中制作3个标志,如boolean task1, task2, task3;onPostExecute方法,将相应的标志设为true,并检查这些标志是否为真if(task1 && task2 && task3) progressDialog.dismiss();。因此,对于最后一个任务,它将把它的标志设置为true,并且2个标志将已经设置为true,因此当条件为真时它将关闭进度对话框。希望你明白了。

答案 1 :(得分:1)

您可以声明进度条。然后在onPreExecute中,显示进度条。在doInBackground中,您可以计算进度值并调用publishProgress来显示进度值。在onPostExecute中,您可以关闭进度条。

您可以这样做:

    public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
    private ProgressDialog mProgressDialog;

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case DIALOG_DOWNLOAD_PROGRESS:
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setMessage("Downloading data file..");
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            mProgressDialog.setCancelable(false);
            mProgressDialog.show();
            return mProgressDialog;
        default:
            return null;
        }
    }

    private class DownloadZipFileTask extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            showDialog(DIALOG_DOWNLOAD_PROGRESS);
        }

        @Override
        protected String doInBackground(String... urls) {
           Long progress;
           calculate progress
           publishProgress("" + progress);
        }

        protected void onProgressUpdate(String... progress) {
         Log.d("ANDRO_ASYNC",progress[0]);
         mProgressDialog.setProgress(Integer.parseInt(progress[0]));
    }

        @Override
        protected void onPostExecute(String result) {

            dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
        }
}

答案 2 :(得分:0)

您可以在第一个AsyncTask的onPreExecute方法中启动进度对话框,并且当为任何AsyncTask调用onPostExecute时,您可以检查是否已完成其他AsyncTask,如果是,则关闭对话框,否则让它运行。 或者,您可以为每个AsyncTask启动一个单独的进度对话框,并在完成相应的AsyncTask时将其关闭。

答案 3 :(得分:0)

最好在第一个异步类中启动进度条,并使用相同的对象关闭最后一个异步类中的进度条....剩下的就剩下了。

obj.dismiss();

答案 4 :(得分:0)

这是您的ayncTask,并使用new Async(Your_Context).execute();

进行调用
    private class Async extends AsyncTask<String, String, Boolean>
    {
        Context context;
        ProgressDialog pd;
        Progress progress;

        Async (Context mcontext)
        {
            context = mcontext; 
            pd = new ProgressDialog(activityContext);
            progress = new Progress(context);
        } 

        @Override
        protected void onPreExecute() 
        {
            pd.setTitle("Loading..");

            pd.setMessage("Please Wait..");

            pd.setCancelable(false);
            pd.show();
            super.onPreExecute();
        }

        @Override
        protected Boolean doInBackground(String... params) 
        {

            return flag;
        }

        @Override
        protected void onProgressUpdate(String... values) 
        {
            super.onProgressUpdate(values);

            pd.setMessage("Please Wait..." + values[0].toString());
        }

        public class Progress 
        {
            public ServerToApp task;

            public Progress(ServerToApp task) 
            {
                this.task = task;
            }

            public void publish(String value) 
            {
                task.publishProgress(value);
            }
        }

        @Override
        protected void onPostExecute(Boolean result) 
        {
            super.onPostExecute(result);
            if(pd.isShowing()) pd.dismiss();
        }
}

为了更新进度,你应该从你的方法中传递这样的值

progress.publish(Values);

希望它会对你有所帮助。