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 zachowaniaDialog 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.