Qual é a diferença entre uma caixa de diálogo ser descartada ou cancelada no Android?

193

Como o título diz, qual é a diferença entre uma caixa de diálogo ser descartada ou cancelada no Android?

Aal
fonte

Respostas:

187

Normalmente, uma caixa de diálogo é descartada quando seu trabalho é concluído e está sendo removido da tela. Uma caixa de diálogo é cancelada quando o usuário deseja sair da caixa de diálogo e pressiona o botão Voltar.

Por exemplo, você tem uma caixa de diálogo padrão Sim / Não na tela. Se o usuário clicar em Não, a caixa de diálogo será descartada e o valor de Não será retornado ao chamador. Se, em vez de escolher Sim ou Não, o usuário clicar em Voltar para sair da caixa de diálogo em vez de fazer uma escolha, a caixa de diálogo será cancelada e nenhum valor será retornado ao chamador.

Lee
fonte
Obrigado pela resposta. Estou tentando definir o que acontece se o usuário pressionar o botão Cancelar em um selecionador de datas. Primeiro, tentei usar um ouvinte de dispensa e isso funcionou, mas também aconteceu se o usuário escolher um horário. Então, tentei um ouvinte de cancelamento, e ele nunca disparou, mesmo se eu pressionasse cancelar. Você sabe o que devo fazer?
Aal
2
Se você estiver usando um DatePickerDialog, use um OnDateSetListener para ser notificado quando a data for alterada. Se alguém clicar no botão Cancelar ..., ele não será chamado e a caixa de diálogo desaparecerá por conta própria. Para usos normais do DatePickerDialog, você não precisa definir outros ouvintes.
Lee
Para sua informação, o botão Voltar aciona o ouvinte de cancelamento e o ouvinte de dispensa.
Urbano
28

dismissé algo que você precisa chamar explicitamente no seu código, geralmente para responder a um evento de clique em um botão no seu Dialog. Se preferir, você pode chamar dismissDialogo Activity, que por sua vez chamará dismisso Dialog.

O cancelmétodo só é executado quando é explicitamente chamado no seu código ou quando o usuário pressiona o botão VOLTAR quando o cancelável Dialogestá aberto (como @Lee observou).

Se você estiver usando a DatePicker, tudo isso ainda é o caso. Como o @Lee disse, DatePickerDialog.OnDateSetListenerapenas detecta quando o usuário escolhe uma data no DatePicker.

A Referência do desenvolvedor do Android fornece mais informações sobre Dialogs.

hotshot309
fonte
Você também pode chamar o cancelmétodo Existem dois ouvintes diferentes para alterar e cancelar.
creativecreatorormaybenot
12

DismissChamar a dispensa remove a caixa de diálogo da tela. Este método pode ser chamado com segurança a partir de qualquer thread. Observe que você não deve substituir esse método para fazer a limpeza quando a caixa de diálogo for descartada; em vez disso, implemente-a no onStop .

CancelSe você cancelar, cancela a caixa de diálogo. Isso é basicamente o mesmo que ligar para dispensar () , mas também chamará seu DialogInterface.OnCancelListener , se registrado.

Hide Este método oculta a caixa de diálogo, mas não a descarta.

E para mais, veja aqui

ucMedia
fonte