setOnClickListener 中的 ProgressDialog 未显示

ProgressDialog inside setOnClickListener is not showing

我想在 onclicklistener 中显示进度对话框,同时调用另一个函数进行一些计算。此功能在另一个 class 中。 这是我的代码:

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();

上面的函数应该填充数组中的一些元素(solved_array)。然后我正在对该数组执行操作。 (这一切大约需要 3 秒)。

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

然后关闭进度对话框:

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

检测结果:

  1. 如果我没有关闭进度对话框,那么它一直显示良好(但可以肯定的是应用程序挂起为 setCancelable(false);
  2. 如果我没有关闭进度对话框,那么它根本不会显示。

非常感谢您在调用另一个函数时显示进度对话框的建议。

您需要为 运行 您的函数创建一个新线程。

     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