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();
}
检测结果:
- 如果我没有关闭进度对话框,那么它一直显示良好(但可以肯定的是应用程序挂起为 setCancelable(false);
- 如果我没有关闭进度对话框,那么它根本不会显示。
非常感谢您在调用另一个函数时显示进度对话框的建议。
您需要为 运行 您的函数创建一个新线程。
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
我想在 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();
}
检测结果:
- 如果我没有关闭进度对话框,那么它一直显示良好(但可以肯定的是应用程序挂起为 setCancelable(false);
- 如果我没有关闭进度对话框,那么它根本不会显示。
非常感谢您在调用另一个函数时显示进度对话框的建议。
您需要为 运行 您的函数创建一个新线程。
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