Jelly Bean DatePickerDialog - ¿hay alguna forma de cancelar?

---Nota a los moderadores: Hoy (15 de julio), he notado que alguien ya enfrentó este problema.aquí. Pero no estoy seguro de si es apropiado cerrar esto como un duplicado, ya que creo que proporcioné una explicación mucho mejor del problema. No estoy seguro de si debo editar la otra pregunta y pegar este contenido allí, pero no me siento cómodo cambiando demasiado la pregunta de otra persona. ---

tengo algoextraño aquí.

No creo que el problema dependa del SDK contra el que compila. La versión del sistema operativo del dispositivo es lo que importa.

Problema # 1: inconsistencia por defecto

DatePickerDialog se cambió (?) en Jelly Bean y ahora solo proporciona unHecho botón. Las versiones anteriores incluían unaCancelar botón, y esto puede afectar la experiencia del usuario (inconsistencia, memoria muscular de versiones anteriores de Android).

Reproducir exactamente: Crea un proyecto básico. Pon esto enonCreate:

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

Esperado: A Cancelar Botón para que aparezca en el diálogo.

Corriente: A Cancelar El botón no aparece.

Capturas de pantalla: 4.0.3 (Vale y4.1.1 (¿posiblemente mal?).

Problema # 2: mal comportamiento de despedida

Llamadas de diálogo a cualquier interlocutor al que debe llamar, y luegosiempre llamadasOnDateSetListener oyente. La cancelación aún llama al método establecido, y configurándolo llama al método dos veces.

Reproducir exactamente: Use el código # 1, pero agregue el código a continuación (verá que esto resuelve # 1, pero solo visualmente / UI):

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

Esperado:

Presionando la tecla ATRÁS o haciendo clic fuera del cuadro de diálogohacer nada.Al presionar "Cancelar" se debería imprimirSelector Cancelar!.Presionando "Set" debería imprimirConjunto de recogedor!.

Corriente:

Presionando la tecla ATRÁS o haciendo clic fuera del diálogo se imprimeConjunto de recogedor!.Al presionar "Cancelar" se imprimenSelector Cancelar! y entoncesConjunto de recogedor!.Presionando "Set" imprimeConjunto de recogedor! y entoncesConjunto de recogedor!.

Líneas de registro que muestran el comportamiento:

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!
Otras notas y comentarios.Envolviéndolo alrededor de unDatePickerFragment no importa Le simplifiqué el problema, pero lo probé.