2017-09-15 3 views
0

ich für Dialoge mit einer Funktion util Klasse:Entlassen Alertdialog von Button in benutzerdefinierter Ansicht

public static void buildCustomDialog(Context contextRef, View dialogContentView) 
{ 
    AlertDialog.Builder builder = new AlertDialog.Builder(contextRef); 

    builder.setView(dialogContentView); 

    builder.setNegativeButton(contextRef.getString(R.string.std_cancel), null); 

    AlertDialog dialog = builder.create(); 

    dialog.show(); 

} 

und die Ansicht, dass ich es verfügt über zwei Tasten mit clickListeners passieren. Alles funktioniert super, außer dass ich den Dialog nicht schließen kann, wenn der Benutzer auf eine der benutzerdefinierten Schaltflächen klickt. Sie navigieren also zu einer anderen Seite, drücken zurück und der Dialog ist noch da.

Wie kann ich einen Verweis auf den Dialog in den benutzerdefinierten clickListeners erhalten, die ich vor dem Erstellen des Dialogfelds erstelle?

Ich habe alle nur denkbaren Möglichkeiten ausprobiert. Mein letzter Versuch ist, ein benutzerdefiniertes DialogFragment mit einer benutzerdefinierten Schnittstelle zu erstellen, aber selbst dann wird die Ansicht (und damit die Schaltflächen und ihre Listener) erstellt, bevor der Builder "AlertDialog" das Dialogfeld erstellt.

Ich fühle mich wie dies sollte super einfach sein, und ich bin etwas fehlt ...

Antwort

2

Sie benötigen onClick Zuhörer auf Ihrer benutzerdefinierten Taste.

Versuchen Sie folgendes:

AlertDialog.Builder builder = new AlertDialog.Builder(contextRef); 

    builder.setView(dialogContentView); 

    Button btnOk= (Button) dialogContentView.findViewById(R.id.btn_ok); 

    builder.setNegativeButton(contextRef.getString(R.string.std_cancel), null); 

    AlertDialog dialog = builder.create(); 

    dialog.show(); 

    btnOk.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      dialog.dismiss(); 
     } 
    }); 

Das ist es !!

+0

Yup. Ich stellte den Zuhörer ein, bevor ich den Dialog erstellte und es kam mir nie in den Sinn, ihn einfach festzulegen ... ugh. Vielen Dank! – MayNotBe

0

Einfach. return dialog reference, sammle es dort, wo du diese Methode aufrufst. Überprüfen Sie in Ihrem Listener-Listenfeld, ob die Dialogreferenz ein gültiges Objekt enthält. Wenn ja, dann schließen Sie diesen Dialog.

Verwandte Themen