Jelly Bean DatePickerDialog - Gibt es eine Möglichkeit, abzubrechen?

--- Hinweis an die Moderatoren: Heute (15. Juli), habe ich bemerkt, dass jemand bereits konfrontiert dieses problem hier. Aber ich bin mir nicht sicher, ob es angemessen ist, um diese zu schließen als Duplikat, da ich denke, dass ich eine viel bessere Erklärung für das Problem. Ich bin mir nicht sicher, ob ich es Bearbeiten sollte, die andere Frage und fügen Sie diesen Inhalt gibt es, aber ich bin wohl nicht ändern, jemand anderes die Frage zu viel. ---

Habe ich etwas komisch hier.

Glaube ich nicht, das problem hängt davon ab, welches SDK Sie bauen vor. Das Gerät, OS-version ist es, was zählt.

Problem #1: Inkonsistenz standardmäßig

DatePickerDialog wurde geändert (?) in Jelly Bean und jetzt stellt nur eine Getan - Taste. Frühere Versionen enthalten einen Abbrechen - Taste, und dies kann Einfluss auf user experience (Inkonsistenz, Muskel-Speicher von vorherigen Android-Versionen).

Replizieren: Erstellen Sie ein basic-Projekt. Setzen Sie diese in 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();

Erwartet: Eine Abbrechen - Taste erscheinen im dialog.

Strom: Eine Abbrechen Schaltfläche nicht angezeigt.

Screenshots: 4.0.3 (OK) und 4.1.1 (möglicherweise falsch?).

Problem #2: falsch abtun Verhalten

Dialog aufruft, je nachdem, welcher Hörer sollte es in der Tat, und dann immer Anrufe OnDateSetListener Zuhörer. Cancelling-noch immer ruft die set-Methode, und es ruft die Methode zweimal.

Replizieren: #1 code, sondern fügen Sie folgenden code ein (Sie sehen dies löst die #1, aber nur optisch/UI):

picker.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", 
        new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Log.d("Picker", "Cancel!");
            }
        });

Erwartet:

  • Drücken der ZURÜCK-Taste oder klicken außerhalb der dialog sollte nichts tun.
  • Drücken von "Abbrechen" drucken Picker Abbrechen!.
  • Drücken der Taste "Set" drucken Picker Set!.

Strom:

  • Drücken der ZURÜCK-Taste oder einen Klick außerhalb des dialog-prints Picker Set!.
  • Drücken von "Abbrechen" druckt Picker Abbrechen! und dann Picker Set!.
  • Drücken der Taste "Set" druckt Picker Set! und dann Picker Set!.

Log Linien zeigen das Verhalten:

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 Erläuterungen und Kommentare

  • Wickeln Sie es um eine DatePickerFragment egal. Ich vereinfachte das problem für Sie, aber ich habe es getestet.

InformationsquelleAutor der Frage davidcesarino | 2012-07-12

Schreibe einen Kommentar