setOnClickListener中的ProgressDialog未显示

时间:2018-02-03 01:27:59

标签: android progressdialog

我想在onc​​licklistener中显示进度对话框,同时调用另一个函数来进行一些计算。这个函数在另一个类中。 这是我的代码:

progressDialog = new ProgressDialog(Game.this);
                    progressDialog.setMessage(getString(R.string.loading)); // Setting Message
                    progressDialog.setTitle(getString(R.string.checking)); // Setting Title
                    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); // Progress Dialog Style Spinner

                    progressDialog.show(); // Display Progress Dialog
                    progressDialog.setCancelable(false);

然后我正在调用另一个函数:

Solver.dosolve();

上面的函数应该填充数组中的一些元素(solve_array)。然后我正在对这个数组做一个动作。 (这大约需要3秒钟。)

solved_array.remove(solved_array.size() - 1);

然后解雇进度对话框:

    if(progressDialog!= null && progressDialog.isShowing()) {
        progressDialog.dismiss();
    }

测试结果:

  1. 如果我没有取消进度对话框,那么它一直显示良好(但肯定应用程序挂起为setCancelable(false);
  2. 如果我没有取消进度对话框,那么它根本就不显示。
  3. 我们非常感谢您在调用其他功能时显示进度对话框的建议。

1 个答案:

答案 0 :(得分:0)

您需要创建一个新线程来运行您的功能。

     Thread t=new Thread(new Runnable() {
            @Override
            public void run() {


            //update UI  show dialog for example
            MyActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    progressDialog.show;
                }
            });

            try {
            //simulating expensive function
            System.out.println("function started");

                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            System.out.println("function finished");
            //update the UI
            MyActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    progressDialog.dismiss;
                }
            });
        }
    })

使用t.start()t=null来启动和取消您的主题。

你也可以去AsyncTask