2012-09-24 17 views
8

Mi aplicación Android muestra un AlertDialog al hacer clic en un botón. Cuando hago clic en el botón, más de una vez se crea más de un cuadro de diálogo. ¿Cómo puedo arreglar esto?¿Cómo se muestra un solo cuadro de diálogo a la vez?

Aquí está mi código:

button.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     dialog = new AlertDialog.Builder(context);    
     dialog.show(); 
    } 
}); 
+2

Muéstranos el código ... – RvdK

+0

En lugar de AlertDialog.Builder, estoy usando una clase personalizada se extiende AlertDialog. que muestra una imagen. Sin botones. –

+1

Supongo que todavía puedes usar el mismo concepto. Solo crea un tipo de bandera :) – Araw

Respuesta

4

Puede crear un indicador global (booleano) que se establece en verdadero si se muestra un cuadro de diálogo? Si el usuario hace clic en "Aceptar", "Sí", "No" o "Nada", el cuadro de diálogo se cierra y usted configura el indicador como falso.

Así que algo como:

boolean dialogShown; 

If(dialogShown) 
{ 
    return; 
} 
else 
{ 
    dialogShown = true; 
    dialog = new AlertDialog.Builder(context);    
    dialog.show(); 
} 
+1

siempre pone los bloques entre paréntesis, incluso en líneas rectas. Se ahorra muchos problemas (especialmente cuando usa lenguajes con preprocesador y macros) –

0

Cada vez que pulse el botón se llama al método. Entonces, esta es la razón por la que se muestra veces múltiples.

La forma más fácil es simplemente definir una variable de instancia en la clase de su código como:

boolean alertIsBeingShown = NO; 

A continuación, ponemos a true cuando se muestra la alerta como este

button.setOnClickListener(new OnClickListener() { 
      @Override 
     public void onClick(View v) { 
       if (alertIsBeeingShown) return; 
       alertIsBeingShown = YES; 
       dialog = new AlertDialog.Builder(context);    
       dialog.show(); 

    } 
}); 

y establezca la variable en falso en el código donde presiona el botón Aceptar para que desaparezca.

+0

¿Por qué estás usando SÍ y NO? –

+1

demasiado objetivo-c Supongo que –

0

Crea un botón positivo o negativo para él y simplemente llámalo como OK y úsalo para descartar. Algo como:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setMessage("Look at this dialog!") 
     .setCancelable(false) 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       //do things 
      } 
     }); 
AlertDialog alert = builder.create(); 
alert.show(); 
-1

creado el diálogo en un try-catch-bloque de la siguiente manera:

try { 
     dialog.setVisible(true); 
    } catch (NullPointerException e) { 
     dialog = new AlertDialog.Builder(context);    
     dialog.show(); 
    } 

La primera vez que ejecute esto, el NullPointerException es lanzada y el diálogo es creado. En los siguientes momentos, nada visible realmente sucederá.

16

es necesario comprobar si isShowing de diálogo o no

de diálogo tiene un método isShowing() que debe devolver si el diálogo es visible en ese momento.

public AlertDialog myDialog; 

public void showDialog(Context context) { 
    if(myDialog != null && myDialog.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); 
    myDialog = builder.create(); 
    myDialog.show(); 
    } 
+0

Increíble. se merece más de 1 upvote :) – Prabs

Cuestiones relacionadas