Jelly Bean DatePickerDialog - есть ли способ отменить?

--- Note to moderators: Today (July 15), I've noticed that someone already faced this problem Вот, Но я не уверен, что уместно закрыть это как дубликат, так как я думаю, что предоставил гораздо лучшее объяснение проблемы. Я не уверен, стоит ли мне редактировать другой вопрос и вставлять туда этот контент, но мне неудобно слишком сильно менять чужой вопрос. ---

у меня кое-что естьweird Вот.

Я не думаю, что проблема зависит от того, против какого SDK вы создаете. Версия ОС устройства имеет значение.

Problem #1: inconsistency by default

DatePickerDialog был изменен (?) в Jelly Bean и теперь предоставляет толькоDone кнопка. Предыдущие версии включалиCancel кнопка, и это может повлиять на пользовательский опыт (несоответствие, мышечная память из предыдущих версий Android).

Replicate: Создать базовый проект. Поместите это в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();

Expected: Cancel кнопка, чтобы появиться в диалоге.

Current: Cancel Кнопка не появляется.

Screenshots: 4.0.3 (Хорошо и4.1.1 (возможно, неправильно?).

Problem #2: wrong dismiss behavior

Диалог вызывает того слушателя, которому он действительно должен позвонить, а затемalways звонкиOnDateSetListener слушатель. Отмена по-прежнему вызывает метод set, а установка его вызывает метод дважды.

Replicate: Используйте код № 1, но добавьте код ниже (вы увидите, что это решает № 1, но только визуально / пользовательский интерфейс):

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

Expected:

Pressing the BACK key or clicking outside the dialog should do nothing. Pressing "Cancel" should print Picker Cancel!. Pressing "Set" should print Picker Set!.

Current:

Pressing the BACK key or clicking outside the dialog prints Picker Set!. Pressing "Cancel" prints Picker Cancel! and then Picker Set!. Pressing "Set" prints Picker Set! and then Picker Set!.

Строки журнала, показывающие поведение:

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!
Other notes and comments Wrapping it around a DatePickerFragment doesn't matter. I simplified the problem for you, but I've tested it.