Android 特定计算后对话框关闭
Android dialog dismiss after certain computation
我遇到了以下问题:
我像这样使用对话框创建了一个等待微调器
final Dialog progDialog = new Dialog(context);
progDialog.setContentView(R.layout.progress_dialog);
progDialog.setTitle("Calculating...");
progDialog.setCancelable(false);
progDialog.setCanceledOnTouchOutside(false);
WindowManager.LayoutParams lp = progDialog.getWindow().getAttributes();
lp.dimAmount = 0.7f;
progDialog.show();
之后,我在后台计算一些东西
for()...
for()...
计算完成后,我想用
关闭我的对话框
progDialog.dismiss();
但是,这导致我的对话框根本不显示。当我删除最后一行时,会显示对话框但不会关闭。有解决办法吗?
你最好试试 AsyncTask
private class YourAsyncTask extends AsyncTask<Void, Void, Void> {
private ProgressDialog progDialog;
public YourAsyncTask(MyMainActivity activity) {
progDialog = new ProgressDialog(activity);
}
@Override
protected void onPreExecute() {
progDialog.setContentView(R.layout.progress_dialog);
progDialog.setTitle("Calculating...");
progDialog.setCancelable(false);
progDialog.setCanceledOnTouchOutside(false);
progDialog.show();
}
@Override
protected Void doInBackground(Void... args) {
// do background work here
return null;
}
@Override
protected void onPostExecute(Void result) {
// do UI work here
if (progDialog.isShowing()) {
progDialog.dismiss();
}
}
}
在 Main Activity 中使用以上代码。并且,在 doInBackground
.
中进行计算
要为您的计算设置计时器,请尝试以下代码:
Runnable progressRunnable = new Runnable() {
@Override
public void run() {
progDialog.cancel();
}
};
Handler pdCanceller = new Handler();
pdCanceller.postDelayed(progressRunnable, 3000);
添加show/hide:
progDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
theLayout.setVisibility(View.GONE);
}
});
更新:
ProgressDialog class 自 API 26
起已弃用
我遇到了以下问题:
我像这样使用对话框创建了一个等待微调器
final Dialog progDialog = new Dialog(context);
progDialog.setContentView(R.layout.progress_dialog);
progDialog.setTitle("Calculating...");
progDialog.setCancelable(false);
progDialog.setCanceledOnTouchOutside(false);
WindowManager.LayoutParams lp = progDialog.getWindow().getAttributes();
lp.dimAmount = 0.7f;
progDialog.show();
之后,我在后台计算一些东西
for()...
for()...
计算完成后,我想用
关闭我的对话框progDialog.dismiss();
但是,这导致我的对话框根本不显示。当我删除最后一行时,会显示对话框但不会关闭。有解决办法吗?
你最好试试 AsyncTask
private class YourAsyncTask extends AsyncTask<Void, Void, Void> {
private ProgressDialog progDialog;
public YourAsyncTask(MyMainActivity activity) {
progDialog = new ProgressDialog(activity);
}
@Override
protected void onPreExecute() {
progDialog.setContentView(R.layout.progress_dialog);
progDialog.setTitle("Calculating...");
progDialog.setCancelable(false);
progDialog.setCanceledOnTouchOutside(false);
progDialog.show();
}
@Override
protected Void doInBackground(Void... args) {
// do background work here
return null;
}
@Override
protected void onPostExecute(Void result) {
// do UI work here
if (progDialog.isShowing()) {
progDialog.dismiss();
}
}
}
在 Main Activity 中使用以上代码。并且,在 doInBackground
.
要为您的计算设置计时器,请尝试以下代码:
Runnable progressRunnable = new Runnable() {
@Override
public void run() {
progDialog.cancel();
}
};
Handler pdCanceller = new Handler();
pdCanceller.postDelayed(progressRunnable, 3000);
添加show/hide:
progDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
theLayout.setVisibility(View.GONE);
}
});
更新:
ProgressDialog class 自 API 26
起已弃用