--- Note aux modérateurs: aujourd'Hui (le 15 juillet), j'ai remarqué que quelqu'un a déjà été confronté à ce problème ici. Mais je ne suis pas sûr si c'est approprié pour fermer cette comme un doublon, car je crois que j'ai fourni une bien meilleure explication de la question. Je ne suis pas sûr si je devrais modifier l'autre question, et de coller ce contenu là-bas, mais je ne suis pas à l'aise de changer de quelqu'un d'autre question. ---
J'ai quelque chose de bizarre ici.
Je ne pense pas que le problème dépend de la SDK vous construire contre. L'appareil version du système d'exploitation est ce qui compte.
Problème #1: incohérence par défaut
DatePickerDialog
a été changé (?) dans Jelly Bean et maintenant seulement un Fait bouton. Les versions précédentes inclus un Annuler bouton, et cela peut affecter l'expérience utilisateur (incohérence, la mémoire musculaire des précédentes versions d'Android).
Répliquer: Créer un projet de base. Mettre cela en onCreate
:
DatePickerDialog picker = new DatePickerDialog(
this,
new OnDateSetListener() {
@Override
public void onDateSet(DatePicker v, int y, int m, int d) {
Log.d("Picker", "Set!");
}
},
2012, 6, 15);
picker.show();
Prévu: Un Annuler bouton apparaisse dans la boîte de dialogue.
Courant: Un Annuler bouton n'apparaît pas.
Captures d'écran: 4.0.3 (OK) et 4.1.1 (éventuellement mal?).
Problème n ° 2: faux rejeter comportement
Dialogue des appels selon l'auditeur, il doit appeler en effet, et puis toujours des appels OnDateSetListener
auditeur. L'annulation appelle encore la méthode de jeu, et appelle la méthode à deux reprises.
Répliquer: Utilisez le #1 du code, mais ajoutez le code ci-dessous (vous verrez cela résout #1, mais seulement visuellement/UI):
picker.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.d("Picker", "Cancel!");
}
});
Prévu:
- En appuyant sur la touche RETOUR ou en cliquant à l'extérieur de la boîte de dialogue devrait ne rien faire.
- Appuyant sur la touche "Annuler" doit imprimer le Sélecteur d'Annuler!.
- En appuyant sur "Set" doit imprimer Sélecteur de Jeu!.
Courant:
- En appuyant sur la touche RETOUR ou en cliquant à l'extérieur de la boîte de dialogue imprime Sélecteur de Jeu!.
- Appuyant sur la touche "Annuler" imprime Sélecteur d'Annuler! et puis Sélecteur de Jeu!.
- En appuyant sur "Set" imprime Sélecteur de Jeu! et puis Sélecteur de Jeu!.
Les lignes du journal montrant le comportement:
07-15 12:00:13.415: D/Picker(21000): Set!
07-15 12:00:24.860: D/Picker(21000): Cancel!
07-15 12:00:24.876: D/Picker(21000): Set!
07-15 12:00:33.696: D/Picker(21000): Set!
07-15 12:00:33.719: D/Picker(21000): Set!
D'autres notes et commentaires
- L'enroulant autour d'un
DatePickerFragment
n'a pas d'importance. J'ai simplifié le problème pour vous, mais je l'ai testé.