Jelly Bean DatePickerDialog - czy istnieje sposób na anulowanie?

---Uwaga dla moderatorów: Dzisiaj (15 lipca) zauważyłem, że ktoś już zmierzył się z tym problememtutaj. Ale nie jestem pewien, czy właściwe jest zamknięcie tego jako duplikatu, ponieważ myślę, że podałem znacznie lepsze wyjaśnienie tego problemu. Nie jestem pewien, czy powinienem edytować inne pytanie i wkleić je tam, ale nie czuję się komfortowo, zmieniając za bardzo pytanie kogoś innego. ---

mam cośdziwne tutaj.

Nie sądzę, aby problem zależał od tego, z którego SDK zbudujesz. Liczy się wersja systemu operacyjnego.

Problem # 1: domyślnie niespójność

DatePickerDialog został zmieniony (?) w Jelly Bean i teraz dostarcza tylkoGotowe przycisk. Poprzednie wersje zawierały aAnuluj przycisk, co może wpływać na wrażenia użytkownika (niespójność, pamięć mięśniowa z poprzednich wersji Androida).

Replika: Utwórz podstawowy projekt. Włóż toonCreate:

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();

Spodziewany: A Anuluj przycisk, aby pojawić się w oknie dialogowym.

Obecny: A Anuluj przycisk nie pojawia się.

Zrzuty ekranu: 4.0.3 (Dobrze, i4.1.1 (być może źle?).

Problem # 2: złe odrzucenie zachowania

Dialog dzwoni niezależnie od tego, który słuchacz powinien wywołać, a następniezawsze połączeniaOnDateSetListener słuchacz. Anulowanie nadal wywołuje metodę set, a ustawienie wywołuje metodę dwa razy.

Replika: Użyj kodu # 1, ale dodaj kod poniżej (zobaczysz to rozwiązanie # 1, ale tylko wizualnie / UI):

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

Spodziewany:

Naciśnięcie klawisza BACK lub kliknięcie poza oknem dialogowym powinnonic nie robić.Naciśnięcie „Anuluj” powinno wydrukowaćPicker Anuluj!.Naciśnięcie „Set” powinno wydrukowaćZestaw próbników!.

Obecny:

Naciśnięcie klawisza BACK lub kliknięcie poza oknem powoduje wydrukowanieZestaw próbników!.Naciśnięcie przycisku „Anuluj” powoduje wydrukPicker Anuluj! i wtedyZestaw próbników!.Naciśnięcie „Ustaw” drukujeZestaw próbników! i wtedyZestaw próbników!.

Linie dziennika przedstawiające zachowanie:

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!
Inne uwagi i komentarzeZawijanie go wokółDatePickerFragment nie ma znaczenia. Uprościłem problem, ale przetestowałem go.

questionAnswers(19)

yourAnswerToTheQuestion