Jelly Bean DatePickerDialog - existe uma maneira de cancelar?
---Nota para moderadores: Hoje (15 de julho), percebi que alguém já enfrentou esse problemaAqui. Mas não tenho certeza se é apropriado encerrar isso como uma duplicata, já que acho que forneci uma explicação muito melhor do problema. Não tenho certeza se devo editar a outra pergunta e colar esse conteúdo lá, mas não me sinto à vontade para mudar demais a pergunta de outra pessoa. ---
Eu tenho algoesquisito Aqui.
Não acho que o problema dependa de qual SDK você cria. A versão do sistema operacional do dispositivo é o que importa.
Problema # 1: inconsistência por padrãoDatePickerDialog
foi alterado (?) em Jelly Bean e agora só fornece umFeito botão. Versões anteriores incluíamCancelar botão, e isso pode afetar a experiência do usuário (inconsistência, memória muscular de versões anteriores do Android).
Replicar: Crie um projeto básico. Coloque isso emonCreate
:
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ão para aparecer na caixa de diálogo.
Atual: A Cancelar botão não aparece.
Screenshots: 4.0.3 (OK e4.1.1 (possivelmente errado?)
Problema # 2: comportamento de despedimento erradoDiálogo chama qualquer ouvinte que deve chamar de fato e, em seguida,sempre chamadasOnDateSetListener
ouvinte. O cancelamento ainda chama o método set e a configuração chama o método duas vezes.
Replicar: Use o código # 1, mas adicione o código abaixo (você verá que isso resolve # 1, mas apenas visualmente / UI):
picker.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.d("Picker", "Cancel!");
}
});
Esperado:
Pressionar a tecla BACK ou clicar fora da caixa de diálogo devefazer nada.Pressionar "Cancelar" deve imprimirSelecionador Cancelar!.Pressionando "Set" deve imprimirPicker Set!.Atual:
Pressionar a tecla BACK ou clicar fora da caixa de diálogo imprimePicker Set!.Pressionando "Cancelar" imprimeSelecionador Cancelar! e depoisPicker Set!.Pressionando "Set" imprimePicker Set! e depoisPicker Set!.Linhas de log mostrando o comportamento:
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!
Outras notas e comentáriosEnvolvendo-o em torno de umDatePickerFragment
não importa. Eu simplifiquei o problema para você, mas testei.