2010-08-16 11 views
5

tengo un cuadro de diálogo con un diseño personalizado, y trato de cerrarla cuando se presiona un botón:cuadros de diálogo personalizados Problema

private void showAboutDialog() { 

    dialog = new Dialog(MainMenu.this); 
    dialog.setContentView(R.layout.about_dialog); 
    dialog.setCancelable(true); 
    dialog.setTitle(R.string.about_title); 
    dialog.show(); 

    LayoutInflater inflater = (LayoutInflater)  
    getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE); 
    View layout = inflater.inflate(R.layout.about_dialog, 
      (ViewGroup) findViewById(R.id.layout_root)); 

Button closeButton = (Button) layout.findViewById(R.id.about_close_button); 
closeButton.setOnClickListener(new Button.OnClickListener() {  
     public void onClick(View view) { 
     dialog.dismiss();  
     } 
}); 
} 

Pero no funciona.

+0

¿Ve algún error en LogCat? –

Respuesta

7

No se ha llamado a su oyente.

Reemplazar:

Button closeButton = (Button) layout.findViewById(R.id.about_close_button); 

con:

Button closeButton = (Button) dialog.findViewById(R.id.about_close_button); 

y quitar las dos líneas anteriormente (LayoutInflater inflater = ... y View layout = ...).

+0

¡Gracias! Funciona :) – Trox

+0

+1 para su ayuda ... sería genial si puede explicar este trabajo y el otro no? –

+1

@MohitSharma Está bastante claro por qué esto funciona y el código OP no. El OP está llamando a 'inflater.inflate()' que infla el diseño de su diálogo y crea un conjunto de objetos que se almacenan en la variable "diseño". Él entonces está poniendo su oyente en un objeto que ha sido inflado allí. Sin embargo, cuando se ejecuta este código: 'dialog.setContentView (R.layout.about_dialog);' el diálogo está inflando el diseño del diálogo mismo, creando su propio conjunto de objetos (uno de los cuales es el objeto que representa el botón ' 'en el diálogo). Llamar a 'findViewById()' en el diálogo devuelve el ... –

Cuestiones relacionadas