Je vais avoir la question suivante dans le développement Android 2.2 (API 8):Android Dialog rejette au lieu d'annuler
J'ai une classe personnalisée de dialogue comme celui-ci:
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();
}
Et créer un nouveau AuthDialog comme ceci:
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();
}
J'utilise le débogueur, et je vois que quand je résilie (en utilisant le bouton de retour ou en appuyant sur l'extérieur de la boîte de dialogue) l'application rejette la boîte de dialogue au lieu d'annuler.
Quelqu'un at-il eu ce genre de problème avec Dialogs?
Merci à l'avance.
Enfin, j'ai utilisé une méthode Activity et startActivityForResult pour les valeurs attendues. Je vous remercie. –
IMHO, On dirait que l'overkill. La réponse de Kalle explique ce qui se passe; une façon de travailler avec ce fait serait d'annuler mettre un drapeau, de sorte que rejeter sait qu'il s'agissait d'une annulation. – ToolmakerSteve