2016-06-16 5 views
-1

Das gegenwärtige SzenarioAlertDialog.Builder und entlassene Methode Verwirrung

Ich habe ein Gridview in meiner app und jede Zelle ist ein benutzerdefiniertes Layout eines Bildes und ein Textes.

Wenn der Benutzer eine beliebige Zelle berührt Code

über folgende Dialog öffnet
final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setView(layout); 
     builder.show(); 

nun die Aufgabe Layout in builder.setView(layout) das Layout einer Imageview

, ein Textfeld und eine Schaltfläche und wird über folgende Code hat

Jetzt, wenn der Benutzer das Textfeld füllt und die Schaltfläche drückt, möchte ich den Warndialog "weggehen", aber ich kann keinen Weg finden, dies zu tun.

Was habe ich versucht,

ich versuchte builder.dismiss() verwenden, aber es gibt keine Methode für AlertDialog.Builder Typ Objekt zurückzuweisen und die folgenden aswell

cancel(); 

hide(); 

remove(); 

finish(); 

Diese Frage oft auf Stack-Überlauf aufgefordert wurde, und jeder sagt dismiss(); zu verwenden und keine Antwort wurde akzeptiert oder wenn es dann wie?

Wie entlassen Sie die AlertDialogue.Bulder()

Was funktioniert?

Drücken Sie die Zurück-Taste (von den drei Schaltflächen am unteren Rand des Bildschirms in jedem Android) und die Dialogbox wird geschlossen. Aber so sollte es nicht sein. Also habe ich die Methode onBackPressed(); aufgerufen, aber das schließt nicht nur den Dialog ab, sondern bringt den Benutzer auch zur vorherigen Aktivität.

Nun weiß jemand eine neue oder andere Methode, die tatsächlich funktioniert?

+0

Mögliche Duplikat [? Wie entlassen AlertDialog.Builder] (http://stackoverflow.com/questions/11285235/how-to-fail-alertdialog-builder) –

+0

Ich habe das schon gesehen und habe in der Post erwähnt, dass AlertDialogue.bulder diese Methoden nicht hat und in diesem Post auch von OP geschrieben wird. werfen Sie einen Blick wieder –

Antwort

1

Sie sollten create() aufrufen, um das Dialogfeld zu erhalten, und dann das Dialogfeld schließen. Zum Beispiel:

final Dialog dialog = new AlertDialog.Builder(this) 
     .setView(layout) 
     .create(); 
dialog.show(); 

// later, when you need to dismiss the dialog 
dialog.dismiss(); 
+0

ist es nicht Dialog-Klasse seine AlertDialogue.Builder und es hat keine Methode Namen entlassen(); –

+0

Ich habe Ihren Code funktioniert. ändere setView in setContentView(); loswerden schaffen und es funktioniert gut. Danke für den Tipp –

0

Sie können eine externe boolean Variable erstellen und außer Kraft setzen onBackPressed()

boolean isOpen = false; 
void showDialogBuilder() 
{ 
    final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setView(layout); 
    builder.setOnDismissListener(new DialogInterface.OnDismissListener() { 
     @Override 
     public void onDismiss(DialogInterface dialog) { 
      isOpen = false; 
     } 
    }); 
    isOpen = true; 
    builder.show(); 
} 

@Override 
public void onBackPressed() 
{ 
    if(isOpen) 
    { 
     isOpen = false; 
     return; 
    } 

    super.onBackPressed(); 
}