--- Примітка для модераторів: Сьогодні (15 липня), я помітив , що хтось - то вже стикався з цією проблемою тут . Але я не впевнений, чи доречно закрити це як дублікат, оскільки я думаю, що я надав набагато краще пояснення цього питання. Я не впевнений, чи варто мені редагувати інше запитання і вставляти цей вміст туди, але мені не зручно занадто сильно змінювати чуже питання. ---
У мене тут щось дивне .
Я не думаю, що проблема залежить від того, проти якого SDK ви будуєте. Важлива версія версії ОС пристрою.
Проблема №1: непослідовність за замовчуванням
DatePickerDialog
було змінено (?) в Jelly Bean і тепер надає лише кнопку Готово . Попередні версії включали кнопку Скасувати , і це може вплинути на досвід користувача (непослідовність, м'язова пам'ять попередніх версій Android).
Повторити: Створіть базовий проект. Помістіть це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();
Очікуваний: Скасувати кнопку з'явиться в діалоговому вікні.
Струм: Скасування кнопки не відображається.
Знімки екрана: 4.0.3 (гаразд) та 4.1.1 (можливо, неправильно?)
Завдання №2: неправильна поведінка відхилення
Діалогове виклик будь-якого слухача він дійсно повинен дзвонити, а потім завжди викликає OnDateSetListener
слухача. Скасування все ще викликає встановлений метод, а його встановлення викликає метод двічі.
Повторити: Використовуйте код №1, але додайте код нижче (ви побачите це рішення №1, але лише візуально / інтерфейс користувача):
picker.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.d("Picker", "Cancel!");
}
});
Очікується:
- Натискання клавіші НАЗАД або натискання поза діалоговим вікном нічого не повинно робити .
- Якщо натиснути "Скасувати", слід надрукувати "Відмінити вибір"! .
- Якщо натиснути "Встановити", слід надрукувати Набір виборців! .
Поточний:
- Натискання клавіші НАЗАД або натискання поза діалоговим вікном друкує програму " Вибір набору"! .
- Натискаючи кнопку "Скасувати", друкується Виберіть "Скасувати"! а потім Вибір набору! .
- Натискаючи "Встановити", друкується Вибір набору! а потім Вибір набору! .
Рядки журналу, що показують поведінку:
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!
Інші примітки та коментарі
- Обертати її навколо
DatePickerFragment
не має значення. Я спростив проблему для вас, але я її протестував.