Um diálogo é usualmente uma janela pequena que aparece sobre a atividade corrente. A atividade que roda perde o foco e o diálogo aceita todas as interações do usuário. Diálogos são normalmente usados para notificações que devem interromper o usuário e solicitá-lo a fazer algumas pequenas tarefas diretamente relacionadas com a aplicação em progresso (como uma barra de progresso ou prompt de login).
A classe Dialog é a base para a criação de diálogos. Contudo, você tipicamente não deverá instanciar uma classe Dialog diretamente. Ao invés disso, você deve usar uma das subclasses abaixo:
AlertDialog
Esse diálogo que pode gerenciar nenhum, um, dois ou três botões e/ou uma lista de itens selecionáveis que podem incluir checkboxes ou botões do tipo radio. O AlertDialog é capaz de construir a maioria dos diálogos necessários para a interface e é o tipo de diálogo mais sugerido a que seja usado.
ProgressDialog
É um tipo de diálogo que mostra uma roda ou barra de progresso. Como é uma extensão de AlertDialog, também suporta botões.
DatePickerDialog
É um diálogo que permite ao usuário selecionar uma data.
TimePickerDialog
É um diálogo que permite ao usuário selecionar a hora.
Mostrando um diálogo
Um diálogo sempre é criado e mostrado como parte de uma atividade. Você normalmente vai criar diálogos dentro do método callback onCreateDialog(int). Quando você usa esse método callback, o sistema Android automaticamente gerencia o estado de cada diálogo e se torna o proprietário de cada diálogo. Assim, cada diálogo herda certas propriedades da atividade.
Nota: Se você decidir criar um diálogo fora do método onCreateDialog(), ele não será ligado à atividade. Você pode, contudo, ligá-lo a uma atividade com o método setOwnerActivity(Activity).
Quando você quer mostrar um diálogo, chame showDialog(int) e passe um inteiro que unicamente identifica o diálogo que você quer mostrar.
Quando um diálogo é requisitado pela primeira vez, o Android chama o método onCreateDialog(int) da atividade, que é onde você deverá instanciar a classe Dialog. A esse método callback é passado o mesmo ID que você passou para showDialog(int). Após você criar o diálogo, ele retorna o objeto para o final do método.
Antes do diálogo ser mostrado, o Android também chama um método callback chamado onPrepareDialog(int, Dialog). Defina esse método se você quiser mudar quaisquer propriedades para o diálogo a cada vez que ele for chamado. Esse método é chamado todas as vezes que o diálogo é aberto, enquanto que o onCreateDialog(int) é chamado apenas uma vez, na primeira vez que o diálogo é aberto. Se você não definir onPrepareDialog(), então o diálogo vai manter a mesma configuração que da vez anterior que o abriu. A esse método também é passado o ID do diálogo, juntamente com o objeto Dialog que você criou em onCreateDialog().
A melhor maneira de se definir os métodos callback onCreateDialog(int) e o onPrepareDialog(int, Dialog) é com uma sentença switch que checa o parâmetro id que é passado para dentro do método. Cada case deve checar para um único Id de diálogo. Por exemplo, imagine um jogo onde o usuário tenha dois diálogos diferentes: um para indicar que o jogo está pausado e outro para indicar que o jogo está encerrado. Primeiro, defina uma variável do tipo integer para cada diálogo:
static final int DIALOG_PAUSED_ID = 0;
static final int DIALOG_GAMEOVER_ID = 1;
Então, defina o callback para onCreateDialog(int) com o switch case para cada ID:
protected Dialog onCreateDialog(int id) {Quando é hora de mostrar um dos diálogos, chame showDialog(int) com o ID do diálogo:
Dialog dialog;
switch(id) {
case DIALOG_PAUSED_ID:
// Faz o trabalho para definir que o jogo está pausado
break;
case DIALOG_GAMEOVER_ID:
// Faz o trabalho para definir que o jogo encerrou
break;
default:
dialog = null;
}
return dialog;
}
showDialog(DIALOG_PAUSED_ID);Encerrando um Diálogo
Se você quiser encerrar um diálogo, você pode fazê-lo chamando dismiss() no objeto de diálogo. Se necessário, você também pode chamar dismissDialog(int) dentro da atividade, a qual chama dismiss() no diálogo para você.
Se você estiver usando onCreateDialog(int) para gerenciar o estado de seus diálogos, então a cada vez que seu diálogo é encerrado, o estado do objeto de diálogo se mantém com a atividade. Se você decidir que isso não mais necessita do objeto ou que é importante que o estado seja limpo, então você deve chamar removeDialog(int). Esse método vai remover quaisquer referências internas ao objeto e se o diálogo está sendo mostrado, ele vai ser encerrado e desaparecerá da tela.
Usando dismiss listeners
Se você quer que sua aplicação faça algum procedimento assim que o diálogo é encerrado, você deve usar um dismiss listeners no seu diálogo.
Primeiramente defina a interface DialogInterface.OnDismissListener. A interface tem apenas um únido método, onDismiss(DialogInterface), que pode ser chamada quando o diálogo é encerrado. Então simplesmente passe sua implementação de OnDismissListener para setOnDismissListener().
Contudo, note que o diálogo pode também ser cancelado. Esse é um caso especial que indica que o diálogo foi explicitamente cancelado pelo usuário. Isso ocorre quando o usuário pressiona o botão back para fechar o diálogo ou se o diálogo explicitamente chama pelo método cancel() ou, caso exista, o usuário tenha pressionado um botão de cancelamento existente no diálogo. Quando o diálogo é cancelado, o OnDismissListener será notificado, mas se você quiser ser informado que o diálogo foi explicitamente cancelado (e não encerrado normalmente), então você deve registrar um DialogInterface.OnCancelListener com setOnCancelListener().
Criando um AlertDialog
Um alert dialog é uma extensão da classe Dialog. Essa classe é capaz de construir a maioria das interfaces. Você deve usá-lo para diálogos que tenham algumas das seguintes características:
- Um título
- Uma mensagem de texto
- Um, dois ou três botões
- Uma lista de itens selecionáveis (com checkboxes ou radio buttons opcionais).
0 comentários:
Postar um comentário