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

我有这样的自定义对话框类:

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:

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();
}

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

有人在对话中遇到了这种问题吗?

先谢谢了。

有帮助吗?

解决方案

假设此对话框应该是模态,请使您的对话成为一个新活动。

其他提示

对话框关闭时,Ondismiss()总是被解雇。 SetonCancellistener()的文档指出: “只有在取消对话框的情况下,只有在创建者需要知道何时被解雇,使用setondismisslistener时,才会调用这一点”, ,即,它不是Oncancel或Ondismiss,而是在取消对话框时两者。我同意,如果情况并非如此,那将是更有意义的。

setCanceLable(false)将阻止“后退”按钮执行任何操作。许多开发人员只需关闭后面按钮关闭对话框的功能,因为目前尚不清楚对用户的取消还是确定操作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top