2010-10-12 9 views
7

Creé un cuadro de diálogo personalizado que amplía Diálogo. Un botón en el que el diálogo es un botón "Aceptar" que se espera que el usuario presione cuando termine de ingresar información en otros campos. No puedo hacer que ningún oyente esté configurado para disparar ese botón.Botón en el cuadro de diálogo personalizado que no responde a los eventos de clics

public class HeightDialog extends Dialog { 

    private Button okButton; 

    … 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.heightdialog); 

     this.okButton = (Button)this.findViewById(R.id.userOkWithHeight); 

     this.okButton.setOnClickListener(new android.view.View.OnClickListener() { 
     public void onClick(View v) { 
      // Does not fire 
      HeightDialog.this.dismiss(); 
      return; 
     } 
     }); 

     this.okButton.setOnLongClickListener(new OnLongClickListener() { 
     public boolean onLongClick(View v) { 
      // Does not fire 
      HeightDialog.this.dismiss(); 
      return true; 
     } 
     }); 

    this.okButton.setOnTouchListener(new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      // Does not fire 
      HeightDialog.this.dismiss(); 
      return true; 
     } 
    }); 

    … 
} 

También intentaron una implementación en la clase de diálogo implementado los oyentes (http://www.androidcompetencycenter.com/2009/01/android-basics-dialogs-and-floating-activities/) en lugar de utilizar clases internas (http://about-android.blogspot.com/2010/02/create-custom-dialog.html): Todavía no hubo suerte.

public class HeightDialog extends Dialog implements View.OnClickListener { 

    private Button okButton; 

    … 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.heightdialog); 

     this.okButton = (Button)this.findViewById(R.id.userOkWithHeight); 

     this.okButton.setOnClickListener(this); 


    public void onClick(View view){ 
     HeightDialog.this.dismiss(); 
     return; 
    }  
    … 
} 

He establecer puntos de interrupción dentro de cada uno de los oyentes en ambas versiones de la aplicación y el depurador nunca se detiene la ejecución. Intenté usar clases internas para los oyentes que no resolvieron el problema.

¿Alguna pista? Gracias

Respuesta

0

Con el fin de interceptar el botón hace clic HeightDialog debe implementar View.OnClickListener

public class HeightDialog extends Dialog implements View.OnClickListener 
{ 
} 
+0

Tener el Diálogo implementar el oyente no ayudó. Se actualizó la pregunta con ambos enfoques utilizados con el mismo resultado. – Mike

1

¿Por qué no estoy seguro de por qué después de los dos ejemplos mencionados en mi post no funcionaba, me di cuenta de cómo conseguirlo trabajar. Tuve que mover el archivo adjunto de mi oyente al botón en el método onStart() del diálogo del método onCreate() del diálogo.

parecer esto está relacionado también a mí reemplazando el método onStart() en mi diálogo personalizado:

public void onStart() { 
     super.onStart(); 
     setContentView(R.layout.heightdialog); 

     ... 
    } 

Ese código debe tener "redujo a cero" mis oyentes que estaban en el método onCreate().

2
dialog = new Dialog(this); 
dialog.setContentView(R.layout.custom_dialog); 
dialog.setTitle("Custom Dialog"); 


Button dialog_btn = (Button) dialog.findViewById(R.id.dialog_button); 
dialog_btn.setOnClickListener(new View.OnClickListener() 
{ 
    // Perform button logic 
} 
+0

Chirag u copió la respuesta del enlace que se menciona en la respuesta aceptada. no está bien. –

Cuestiones relacionadas