首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android对话框关闭而不是取消

Android对话框关闭而不是取消
EN

Stack Overflow用户
提问于 2011-11-29 06:30:44
回答 3查看 6.6K关注 0票数 1

我在android 2.2 (API 8)中遇到了以下问题:

我有一个自定义的Dialog类,如下所示:

代码语言:javascript
运行
复制
public AuthDialog(final Context context, OnDismissListener dismissListener, OnCancelListener cancelListener) {
    super(context);
    setOnDismissListener(dismissListener);
    setOnCancelListener(cancelListener);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.userpassdialog);
    setTitle("Enter email and password");
    setCancelable(true);
    setCanceledOnTouchOutside(true);
    authEmail = (EditText) findViewById(R.id.authEmail);
    authPass = (EditText) findViewById(R.id.authPass);
    alertMessage = (TextView) findViewById(R.id.auth_alert);
    Button authButton = (Button) findViewById(R.id.authButton);
    View.OnClickListener onClickListener = new View.OnClickListener() {
        public void onClick(View v) {
            if (checkCredentials())
                dismiss();
            else
                showAlert();
        }
    };
    authButton.setOnClickListener(onClickListener);
}

private void showAlert() {
    alertMessage.setText("Wrong user/pass");
    authEmail.setText(null);
    authPass.setText(null);
}

private boolean checkCredentials() {
    // Empty user/pass for now
    boolean checkEmail = authEmail.getText().toString().equals("");
    boolean checkPassword = authPass.getText().toString().equals("");
    return checkEmail && checkPassword;
}

@Override
public void onBackPressed() {
    cancel();
}

我创建了一个新的AuthDialog,如下所示:

代码语言:javascript
运行
复制
private void authenticateThenAccept() {
    OnDismissListener dismissListener = new OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialog) {
            accept();
        }
    };
    OnCancelListener cancelListener = new OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialog) {
            cancel();
        }
    };
    AuthDialog dialog = new AuthDialog(context, dismissListener, cancelListener);
    dialog.show();
}

我正在使用调试器,我看到当我取消时(使用后退按钮或在对话框外按下),应用程序会取消对话框,而不是取消。

有人在Dialog上遇到过这样的问题吗?

在进阶时谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-29 06:37:52

假设此对话框应该是模式对话框,请将您的对话框设置为新活动。

票数 2
EN

Stack Overflow用户

发布于 2011-12-22 07:49:29

onDismiss()总是在对话框关闭时触发。setOnCancelListener()的文档声明:“这将仅在对话框被取消时调用,如果创建者需要知道它通常何时被取消,请使用setOnDismissListener",即当对话框被取消时,它不是onCancel或onDismiss,而是两者都调用。但我同意,如果不是这样的话,这会更有意义。

票数 10
EN

Stack Overflow用户

发布于 2011-11-29 07:58:14

setCancelable(false)将阻止back按钮执行任何操作。许多开发人员只是关闭后退按钮关闭对话框的功能,因为不清楚这对用户来说是取消还是确定操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8303330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档