当用户按下屏幕时,正在调用对话框onCancel方法

时间:2014-02-05 10:43:28

标签: android progressdialog

我有一个已实现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();
}

4 个答案:

答案 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);