Androidダイアログは、キャンセルする代わりに却下します
質問
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();
}
デバッガーを使用していますが、キャンセルすると(バックボタンを使用するか、ダイアログの外側を押す)、アプリはキャンセルする代わりにダイアログを却下することがわかります。
誰かがダイアログにこのような問題を抱えていますか?
Advancedに感謝します。
解決
このダイアログがモーダルであると仮定すると、ダイアログを新しいアクティビティにします。
他のヒント
Ondismiss()は、ダイアログが閉じると常に解雇されます。 setoncancellistener()のドキュメントは次のように述べています。 「これは、ダイアログがキャンセルされたときにのみ呼び出されます。作成者が一般的に却下されるときに知る必要がある場合は、setondismisslistenerを使用してください」, 、つまり、OncancelまたはOndismissのどちらでも、ダイアログがキャンセルされたときの両方です。私はそれがそうではなかったらもっと理にかなっていただろうと私は同意します。
SetCancelable(false)は、バックボタンが何でもするのを防ぎます。多くの開発者は、それがユーザーへのキャンセルまたはOKアクションであるかどうかは不明であるため、ダイアログを閉じるためにバックボタンの機能をオフにします。
所属していません StackOverflow