2010-05-13 33 views
9

Estoy tratando de hacer un cuadro de diálogo personalizado para mostrar una vista en este cuadro de diálogo. Este es el código del constructor:¿Desea descartar un cuadro de diálogo personalizado?

//Getting the layout 
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
View layout = inflater.inflate(R.layout.custom_dialog_simple, 
           (ViewGroup) findViewById(R.id.rlDialogSimple)); 

//Change Text and on click 
TextView tvDialogSimple = (TextView) layout.findViewById(R.id.tvDialogSimple); 
tvDialogSimple.setText(R.string.avisoComprobar); 
Button btDialogSimple = (Button) layout.findViewById(R.id.btDialogSimple); 
btDialogSimple.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     //Do some stuff 

     //Here i want to close the dialog 
    } 
}); 

AlertDialog.Builder builder = new AlertDialog.Builder(AcPanelEditor.this); 
builder.setView(layout); 
AlertDialog alert = builder.create(); 
alert.show(); 

Por lo tanto, quiero cerrar el diálogo en el onClick del btDialogSimple. ¿Cómo puedo hacerlo? No sé cómo llamar al método de descarte desde dentro de un onclicklistener.

Mis botones tienen un diseño personalizado, por lo que no quiero hacer un constructor.setPositiveButton.

¿Alguna idea?

+0

¡Gran pregunta! Esta es exactamente la forma en que * parece * que debería funcionar. Pero, por supuesto, no es así, ¡eso sería fácil! (no es el Android Way). –

Respuesta

16

usted tiene que salvar el AlertDialog a su propiedad clase padre, a continuación, utilizar algo como esto:

class parentClass ........ { 
private AlertDialog alert=null; 
........ 
public void onClick(View v) { 
     //Do some stuff 

     //Here i want to close the dialog 
     if (parentClass.this.alert!=null)    
     parentClass.this.alert.dismiss(); 
    } 
........ 
this.alert = builder.create(); 
this.alert.show(); 

}

+0

¡Eso funcionó, gracias! – YaW

+0

Muchas gracias! – davs

+0

Funciona para mí, también. Pero dado que tengo un diálogo personalizado creado como un archivo xml, no es necesario que lo haga, simplemente use setContentView (custom_dialog). –

7

Creo que una mejor manera puede ser llamar

dismissDialog(DIALOG_ID); 

¿No convertiría el AlertDialog en una propiedad de clase en un fracaso para devolver un cuadro de diálogo de onCreateDialog()?

+2

¿Cómo funciona esto con un cuadro de diálogo ** personalizado **? –

0

estoy usando

public Dialog dialog; 

buton_sil.setOnClickListener(new View.OnClickListener() { 

      @ Override 
      public void onClick(View v) { 

        DialogClose(); 
        } 
}): 


public void DialogClose() { 
     dialog.dismiss(); 
    } 
0

Uso AlertDialog instancia por ejemplo mAlertDialog como una variable global. Y llame al mAlertDialog.dismiss(); dentro de onClick()

Cuestiones relacionadas