在进度条期间android显示对话框

时间:2013-05-11 06:28:45

标签: java android multithreading dialog progress-bar

我有这个问题:在长时间操作中,我会显示ProgressBar。有时,在此操作过程中,程序必须稍微询问用户 然后,我想显示DialogBox,但如果我这样做,则会收到错误,因为在DialogBox期间无法显示Thread

如何解决我的问题?

2 个答案:

答案 0 :(得分:1)

请使用AsyncTask而不是线程然后它将起作用你不能在线程中执行UI相关的工作。

AsyncTask可以正确,轻松地使用UI线程。该类允许在UI线程上执行后台操作和发布结果,而无需操纵线程和/或处理程序

了解AsyncTask

http://developer.android.com/reference/android/os/AsyncTask.html

Android支持使用标准Java Thread类来执行异步处理。

Android还提供java.util.concurrent包以在后台执行某些操作,例如:使用ThreadPools和Executor类。

如果需要从新线程更新用户界面,则需要与用户界面线程同步。

http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html

答案 1 :(得分:1)

我认为这就是你想要的。

开始操作: -

new StartTask().execute("");

StartTask类: -

    public class StartTask extends AsyncTask<String, Integer, String> {
        private ProgressDialog pdialog;

        @Override
        protected void onPreExecute() {

                // UI work allowed here
                pdialog = new ProgressDialog(syncContext);
                // setup dialog here
                pdialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                pdialog.setMessage("Updating...");
                pdialog.setCancelable(false);
                pdialog.show();
        }

        @Override
        protected void onProgressUpdate(Integer... progress) {
        if(pdialog != null) {
                pdialog.dismiss();
        }
        if(progress[0] == 0) {
            AlertDialog.Builder alertbox = new AlertDialog.Builder(context);
        alertbox.setCancelable(false);
        alertbox.setMessage("This is first Alert").setPositiveButton("OK",
                new OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                        pdialog.show();
                    }
                });
        alertbox.create();
        alertbox.show();
        } else if(progress[0] == 1) {
          AlertDialog.Builder alertbox = new AlertDialog.Builder(context);
        alertbox.setCancelable(false);
        alertbox.setMessage("This is second  Alert").setPositiveButton("OK",
                new OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                        pdialog.show();
                    }
                });
        alertbox.create();
        alertbox.show();
            }

        }

        @Override
        protected void onPostExecute(String returnVal) {
            // UI work allowed here
            if(pdialog != null) {
                pdialog.dismiss();
            }
        }

        @Override
        protected String doInBackground(String... params) {
            for(int i = 0; i < 3; i++) {
                //do some work here
                publishProgress(i);
            }
        }
    }