我在android 2.2 (API 8)中遇到了以下问题:
我有一个自定义的Dialog类,如下所示:
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();
}我正在使用调试器,我看到当我取消时(使用后退按钮或在对话框外按下),应用程序会取消对话框,而不是取消。
有人在Dialog上遇到过这样的问题吗?
在进阶时谢谢。
发布于 2011-11-29 06:37:52
假设此对话框应该是模式对话框,请将您的对话框设置为新活动。
发布于 2011-12-22 07:49:29
onDismiss()总是在对话框关闭时触发。setOnCancelListener()的文档声明:“这将仅在对话框被取消时调用,如果创建者需要知道它通常何时被取消,请使用setOnDismissListener",即当对话框被取消时,它不是onCancel或onDismiss,而是两者都调用。但我同意,如果不是这样的话,这会更有意义。
发布于 2011-11-29 07:58:14
setCancelable(false)将阻止back按钮执行任何操作。许多开发人员只是关闭后退按钮关闭对话框的功能,因为不清楚这对用户来说是取消还是确定操作。
https://stackoverflow.com/questions/8303330
复制相似问题