2011-04-14 24 views
16

tengo método estático en el que creo un diálogo¿Cómo verificar si un cuadro de diálogo está abierto o no?

public static void showDialog(Context context) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setTitle("Title"); 
    builder.setMessage("Message"); 
    builder.setPositiveButton("ok", new OnClickListener() { 
      public void onClick(DialogInterface dialog, int arg1) { 
       dialog.dismiss(); 
      }}); 
    builder.setCancelable(false); 
    builder.create().show(); 
} 

En mi aplicación no puede ser una situación en la que el método puede ser llamado varias veces, pero no quieren abrir 2 o más cuadros de diálogo. ¿Cómo verificar si el diálogo está abierto o no? Gracias ...

Respuesta

32

Debe poner este código en cada actividad que desee para admitir esta función.

public AlertDialog myAlertDialog; 

public void showDialog(Context context) { 
     if(myAlertDialog != null && myAlertDialog.isShowing()) return; 

     AlertDialog.Builder builder = new AlertDialog.Builder(context); 
     builder.setTitle("Title"); 
     builder.setMessage("Message"); 
     builder.setPositiveButton("ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int arg1) { 
        dialog.dismiss(); 
       }}); 
     builder.setCancelable(false); 
     myAlertDialog = builder.create(); 
     myAlertDialog.show(); 
} 
+0

Este enfoque no funcionará en diferentes actividades si pasa 'this' significa' Activity' como contexto. Cuando la segunda actividad invocará este método, el contexto estará desactualizado (la primera 'Actividad'). – ernazm

+1

@ user639183 Tienes razón. Lo mejor es poner esto en la clase de actividad y hacerlo no estático. – vendor

+0

para mí que puede funcionar ... En mi aplicación, solo una Actividad puede llamar a este método algunas veces. Pero no me gusta trabajar con miembros estáticos ... ¿Eso es seguro? ¿Debo matar a este miembro? – Jim

1

Vuelva a escribir su método para devolver AlertDialog, asígnelo a un miembro y verifique antes de invocar este método si es nulo o !isShowing().
También puede usar onCreateDialog en su lugar. Implemente este método en la clase base para sus actividades que necesitan la gestión de diálogo y luego llame al showDialog(int id) donde lo desee.

+0

este método no se ejecutará el mismo diálogo varias veces? – Jim

+0

Intentará, si no va a comprobar 'null' y' isShowing' – ernazm

+0

Gracias ... Debería intentarlo ... – Jim

0
  AlertDialog alertDialog; 
    alertDialog = new AlertDialog.Builder(this).create(); 
    alertDialog.setTitle(title); 
    alertDialog.setMessage(msg);   
    alertDialog.setButton(-3, "Text Parsed", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 
      dialog.dismiss(); 
     } 
    }); 

    alertDialog.show(); 
+0

puede pasar el título, msg dinámicamente ¡desde la función de arriba! – mkh

+0

debes dar respuesta ... un fragmento de código no es una respuesta –

Cuestiones relacionadas