Jelly Bean DatePickerDialog - gibt es eine Möglichkeit abzubrechen?
---Hinweis für die Moderatoren: Heute (15. Juli) ist mir aufgefallen, dass sich bereits jemand diesem Problem gestellt hatHier. Aber ich bin mir nicht sicher, ob es angebracht ist, dieses Duplikat zu schließen, da ich denke, dass ich das Problem viel besser erklärt habe. Ich bin nicht sicher, ob ich die andere Frage bearbeiten und diesen Inhalt dort einfügen soll, aber ich bin nicht zufrieden damit, die Frage einer anderen Person zu stark zu ändern. ---
ich habe etwasseltsam Hier.
Ich denke nicht, dass das Problem davon abhängt, gegen welches SDK Sie bauen. Auf die Betriebssystemversion des Geräts kommt es an.
Problem Nr. 1: Inkonsistenz standardmäßigDatePickerDialog
wurde in Jelly Bean geändert (?) und bietet nun nur noch eineErledigt Taste. Frühere Versionen enthielten aStornieren Dies kann sich auf die Benutzererfahrung auswirken (Inkonsistenz, Muskelgedächtnis aus früheren Android-Versionen).
Replizieren: Erstellen Sie ein Basisprojekt. Setzen Sie dies inonCreate
:
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: A Stornieren Schaltfläche, um im Dialogfeld angezeigt zu werden.
Aktuell: A Stornieren Schaltfläche erscheint nicht.
Screenshots: 4.0.3 (OK und4.1.1 (Möglicherweise falsch?).
Problem Nr. 2: Falsches EntlassungsverhaltenDer Dialog ruft den Hörer auf, den er tatsächlich anrufen soll, und dannimmer AnrufeOnDateSetListener
Hörer. Wenn Sie den Vorgang abbrechen, wird die festgelegte Methode weiterhin aufgerufen, und wenn Sie ihn festlegen, wird die Methode zweimal aufgerufen.
Replizieren: Verwenden Sie den Code Nr. 1, aber fügen Sie den folgenden Code hinzu (Sie werden sehen, dass dies den Code Nr. 1 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:
Drücken Sie die ZURÜCK-Taste oder klicken Sie außerhalb des Dialogfeldsnichts tun.Drücken Sie "Abbrechen", um zu druckenKommissionierer Abbrechen!.Drücken von "Set" sollte druckenPicker Set!.Aktuell:
Durch Drücken der ZURÜCK-Taste oder Klicken außerhalb des Dialogfelds wird gedrucktPicker Set!.Durch Drücken von "Abbrechen" wird gedrucktKommissionierer Abbrechen! und dannPicker Set!.Durch Drücken von "Einstellen" wird gedrucktPicker Set! und dannPicker Set!.Protokollzeilen, die das Verhalten anzeigen:
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!
Sonstige Hinweise und KommentareWickeln Sie es um aDatePickerFragment
spielt keine rolle Ich habe das Problem für Sie vereinfacht, aber ich habe es getestet.