2012-09-24 10 views
8

Meine Android-Anwendung zeigt einen AlertDialog auf Knopfdruck. Wenn ich mehr als einmal auf die Schaltfläche klicke, wird ein Dialog erstellt. Wie kann ich das beheben?Wie zeige ich immer nur einen Dialog an?

Hier ist mein Code:

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

Zeigen Sie uns Ihren Code ... – RvdK

+0

Statt AlertDialog.Builder ich eine benutzerdefinierte Klasse bin mit Alertdialog erstreckt. welches ein Bild zeigt. Keine Knöpfe. –

+1

Raten Sie können immer noch das gleiche Konzept verwenden. Erstellen Sie einfach eine Art Flagge :) – Araw

Antwort

4

Sie können ein globales Flag (boolean) erstellen, das auf True gesetzt wird, wenn ein Dialogfeld angezeigt wird? Wenn der Benutzer auf "OK", "Ja", "Nein" oder "Nein" klickt, wird der Dialog geschlossen und Sie setzen das Flag auf "Falsch".

So wie etwas:

boolean dialogShown; 

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

immer Blöcke in Klammern setzen, auch Einzeiler. Sie sparen sich viele Probleme (besonders wenn Sie Sprachen mit Präprozessor und Makros verwenden) –

0

Für jeden Druck auf die Taste, die Sie die Methode aufrufen. Deshalb wird es multipel gezeigt.

Der einfachste Weg ist, wie eine Instanzvariable in der Klasse Ihres Codes zu definieren:

boolean alertIsBeingShown = NO; 

Dann ist es auf true gesetzt, wenn die Warnung wie diese

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

    } 
}); 

gezeigt wird, und Setzen Sie die Variable in dem Code, in dem Sie die OK-Taste drücken, auf false, damit sie verschwindet.

+0

Warum verwenden Sie JA und NEIN? –

+1

zu viel Ziel-c Ich denke, –

0

Erstellen Sie eine positive oder negative Schaltfläche dafür und nennen Sie es einfach OK und verwenden Sie es zum Schließen. Etwas wie:

-1

den Dialog in einem Try-Catch-Block wie folgt erstellen:

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

Das erste Mal, wenn Sie dies ausführen, wird die Nullpointer geworfen und der Dialog erstellt. Die folgenden Zeiten werden wirklich nichts passieren.

16

Sie müssen überprüfen, ob Dialog isShowing oder nicht

Dialog eine isShowing() Methode hat, die zurückkehren sollte, wenn der Dialog zur Zeit sichtbar ist.

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

Erstaunlich. Verdiene mehr als 1 upvote :) – Prabs

Verwandte Themen