我有一个已实现onCancel方法的进度对话框,因为我想在用户按回键时取消它,但问题是当用户按下屏幕时,对话框被取消,正在调用onCancel方法
我怎么能避免这种情况?
这是代码:
public void showProgressDialog(Context ctx, String text_connecting) {
if (this.progress == null) {
this.progress = ProgressDialog.show(ctx, "", text_connecting, true,
true);
this.progress.setOnCancelListener(new OnCancelListener() {
public void onCancel(DialogInterface dialog) {
hideProgressDialog();
}
});
}
this.progress.show();
}
答案 0 :(得分:0)
您必须检查当前是否正在显示进度对话框(在线程中),如果显示在线程中跟踪运动事件。如果运动事件在显示时取消,则取消为false。如果你想摆脱不断的轮询并保持CPU忙,你也可以使用本地广播。
类似的东西:
@Override
public void run() {
if(progress.isShowing() &&(checkTheVariableYouSetInMotionEventDownHere){
progress.setCancellable(false);
}
}
};
它只是一个小小的黑客,你可以更多地改进上述逻辑,使其成为傻瓜证明。
第二种方法是检查运动事件本身并在那里设置cancelable false。
答案 1 :(得分:0)
好吧,我终于解决了这个问题而不是我问题上的前一个代码
public boolean onKey(DialogInterface arg0, int arg1, KeyEvent arg2) {
if (arg1 == KeyEvent.KEYCODE_BACK) {
hideProgressDialog();
}
return true;
}
答案 2 :(得分:0)
你可以做到
this.progress.setCanceledOnTouchOutside(false);
这样可以防止ProgressDialog
在屏幕上随机触摸时关闭。后退按钮仍会取消它。
答案 3 :(得分:0)
使用此代码查看此link
this.progress.setCanceledOnTouchOutside(false);