--- Hinweis Moderatoren: Heute (15. Juli), ich habe bemerkt , dass jemand bereits mit diesem Problem konfrontiert hier . Ich bin mir jedoch nicht sicher, ob es angemessen ist, dies als Duplikat zu schließen, da ich denke, dass ich das Problem viel besser erklärt habe. Ich bin mir nicht sicher, ob ich die andere Frage bearbeiten und diesen Inhalt dort einfügen soll, aber ich fühle mich nicht wohl, wenn ich die Frage eines anderen zu sehr ändere. --- ---.
Ich habe hier etwas Seltsames .
Ich glaube nicht, dass das Problem davon abhängt, gegen welches SDK Sie bauen. Auf die Betriebssystemversion des Geräts kommt es an.
Problem Nr. 1: Standardmäßig Inkonsistenz
DatePickerDialog
wurde in Jelly Bean geändert (?) und bietet jetzt nur noch eine Schaltfläche " Fertig" . Frühere Versionen enthielten eine Schaltfläche Abbrechen. Dies kann sich auf die Benutzererfahrung auswirken (Inkonsistenz, Muskelgedächtnis aus früheren Android-Versionen).
Replizieren: Erstellen Sie ein Basisprojekt. Geben Sie dies einonCreate
:
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();
Erwartet: EineSchaltfläche Abbrechen wird im Dialogfeld angezeigt.
Aktuell: EineSchaltfläche Abbrechen wird nicht angezeigt.
Screenshots: 4.0.3 (OK) und 4.1.1 (möglicherweise falsch?).
Problem Nr. 2: Falsches Entlassungsverhalten
Der Dialog ruft den Listener auf, den er tatsächlich aufrufen soll, und ruft dann immer den OnDateSetListener
Listener an. Beim Abbrechen wird die set-Methode weiterhin aufgerufen, und beim Festlegen wird die Methode zweimal aufgerufen.
Replizieren: Verwenden Sie den Code Nr. 1, fügen Sie jedoch den folgenden Code hinzu (Sie werden sehen, dass dies den ersten Code löst, jedoch nur visuell / Benutzeroberfläche):
picker.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.d("Picker", "Cancel!");
}
});
Erwartet:
- Das Drücken der Taste ZURÜCK oder das Klicken außerhalb des Dialogfelds sollte nichts bewirken .
- Durch Drücken von "Abbrechen" wird Picker Abbrechen gedruckt ! .
- Durch Drücken von "Set" sollte Picker Set gedruckt werden ! .
Aktuell:
- Durch Drücken der BACK-Taste oder Klicken außerhalb des Dialogfelds wird Picker Set! .
- Durch Drücken von "Abbrechen" wird die Auswahl abgebrochen. Abbrechen! und dann Picker Set! .
- Durch Drücken von "Set" wird das Picker Set gedruckt ! und dann Picker Set! .
Protokollzeilen, die das Verhalten zeigen:
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!
Andere Notizen und Kommentare
- Es
DatePickerFragment
spielt keine Rolle, es um ein zu wickeln. Ich habe das Problem für Sie vereinfacht, aber ich habe es getestet.