Saltar para conteúdo


Foto
- - - - -

AlertDialog interfere com o back stack

alert dialog back stack

  • Por favor inicie sessão para responder
1 resposta a este tópico

#1 yola.

yola.

    Novato

  • Membros
  • Pip
  • 4 mensagens
  • HTC One S

Mensagem publicada 03 January 2013 - 11:51

Olá malta,

Estou a desenvolver uma app onde tenho a seguinte sequência de navegação:

MainActivity > OtherActivity > AlertDialog

O meu AlertDialog constitui um formulário para criação de um objecto. Para tal, defino um novo comportamento para o botão positivo, onde apenas permito que o dialog seja dismissed após verificar o preenchimento de alguns campos obrigatórios.

dialog.setOnShowListener(new DialogInterface.OnShowListener()
{
   @Override
   public void onShow(DialogInterface dialogInterface)
   {
      // Prevents save button from dismissing the dialog
      dialog.getButton(AlertDialog.BUTTON_POSITIVE).setonclickListener(new onclickListener()
      {
         @Override
         public void onclick(View v)
         {
            * verificar preenchimento dos campos *

            if ( * campos obrigatórios estão preenchidos * )
            {
               dialog.dismiss();
            }
            else
            {
               * notificar utilizador *
            }
         }
      }
   }
}

O problema é o seguinte:

Quando carrego no botão negativo do AlertDialog este é imediatamente dismissed e ao fazer back, retorno à MainActivity, como seria esperado. No entanto, ao efectuar o mesmo passo após ter carregado no botão positivo (e efectivamente criado o objecto), saio da aplicação, como se a MainActivity tivesse sido removida do back stack.

Alguém tem alguma sugestão?

Obrigada.

#2 pedronveloso

pedronveloso

    Veloso

  • Administradores
  • 1578 mensagens
  • S8

Mensagem publicada 06 January 2013 - 23:21

Olá malta,

Estou a desenvolver uma app onde tenho a seguinte sequência de navegação:

MainActivity > OtherActivity > AlertDialog

O meu AlertDialog constitui um formulário para criação de um objecto. Para tal, defino um novo comportamento para o botão positivo, onde apenas permito que o dialog seja dismissed após verificar o preenchimento de alguns campos obrigatórios.

dialog.setOnShowListener(new DialogInterface.OnShowListener()
{
@Override
public void onShow(DialogInterface dialogInterface)
{
// Prevents save button from dismissing the dialog
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setonclickListener(new onclickListener()
{
@Override
public void onclick(View v)
{
* verificar preenchimento dos campos *

if ( * campos obrigatórios estão preenchidos * )
{
dialog.dismiss();
}
else
{
* notificar utilizador *
}
}
}
}
}

O problema é o seguinte:

Quando carrego no botão negativo do AlertDialog este é imediatamente dismissed e ao fazer back, retorno à MainActivity, como seria esperado. No entanto, ao efectuar o mesmo passo após ter carregado no botão positivo (e efectivamente criado o objecto), saio da aplicação, como se a MainActivity tivesse sido removida do back stack.

Alguém tem alguma sugestão?

Obrigada.


Não estás de forma alguma a chamar o método finish() dentro da acção positiva do Dialog? Ou mesmo depois.. repara que o Dialog não é bloqueante, ou seja, a partir do momento que fazes show() a um Dialog o código continua a executar mesmo que o utilizador não tenha ainda escolhido nenhuma acção no Dialog, eu penso que talvez seja esse o cenário mais provável que está a acontecer aqui.

Se não for esse o caso não tenho mais ideias, precisaria de ver o restante código da Activity para perceber. Se quiseres envia-me apenas uma Acticity com esse Dialog e confere que sofre do mesmo problema para eu perceber melhor o que estará a acontecer.