38

我正在开发一个 android 项目,该项目在用户下载文件时显示进度对话框。

但是当用户触摸屏幕时,进度对话框会在没有等待 100% 的情况下被关闭。我已经尝试过使用它:

 public boolean onTouchEvent(MotionEvent e) {
        return true;
    } 

但它不起作用。

我怎样才能避免这种情况?

更新 1:

似乎 setCancelable(false) 工作正常。非常感谢您的回答,但是当下载持久并且用户决定放弃时,这是不可能的,因为我已经停用了后退键码:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

我怎么能弄清楚这个?

4

6 回答 6

112

采用dialog.setCancelable(false);

例子 :

        ProgressDialog dialog = new ProgressDialog(WiFiFinderActivity.this);
        dialog.setMessage("please wait...");
        dialog.show();
        dialog.setCancelable(false);
        dialog.setCanceledOnTouchOutside(false);
于 2013-03-15T12:30:59.523 回答
11

您不想使用此覆盖功能..您只需设置

final Dialog dialog=new Dialog(dialogactivity.this);
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
于 2013-03-15T12:35:19.437 回答
4

你可以使用这条线

dialog.setCanceledOnTouchOutside(false);

或者

dialog.setCancelable(false);

根据您的要求

于 2013-03-15T12:31:44.313 回答
1

试试myDialog.setCancelable(false);。我不确定进度对话框是否具有与 AertDialog 相同的方法,但可能值得一试。

编辑(为您的更新添加):尝试使用以下内容:

myDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            //do your canceling stuff here
        }
    });

您是在 AlertDialog 中执行此操作还是在使用 AlertDialog.Builder?

如果您使用的是 AlertDialog.Builder ,则应使用以下内容:

AlertDialog myProgressDialog = myDialog.create();
myProgressDialog.show();

然后你应该可以myProgressDialog.dismiss();在你的 NegativeButton onClick 中使用。

于 2013-03-15T12:31:15.023 回答
0

将此方法添加到您的进度对话框:

progressDialog.setCanceledOnTouchOutside(false);
于 2017-10-09T12:52:42.397 回答
0

在进度对话框中使用此方法:此代码可以正常工作。

 progressDialog.setCanceledOnTouchOutside(false);
于 2019-03-22T10:53:59.870 回答