Botón en cuadro de diálogo personalizado no responde a eventos de clic

He creado un diálogo personalizado que extiende el 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 introducir información en otros campos. No puedo conseguir ningún oyente fijado a ese botón para encender.

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 intenté una implementación donde la clase Dialog implementó a los oyentes en lugar de usar clases internas (http: //www.androidcompetencycenter.com/2009/01/android-basics-dialogs-and-floating-activities/) About-android.blogspot.com/2010/02/create-custom-dialog.html): Todavía no hay 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 establecido puntos de interrupción dentro de cada uno de los oyentes en ambas versiones de la implementación, y el depurador nunca deja de ejecución. He intentado utilizar clases internas para los oyentes que no solucionaron el problema.

¿Alguna pista? Gracias

He encontrado una solución aquí: Manejo de botones en diálogos personalizados

Funciona en mi caso.

 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 } 

¿Por qué no estoy seguro de por qué siguiendo los dos ejemplos mencionados en mi mensaje no funcionó, me di cuenta de cómo conseguir que funcione. Tuve que mover el archivo adjunto de mi oyente al botón del método onStart () del diálogo desde el método onCreate () del diálogo.

Parece que esto está relacionado conmigo también sobreescribir el método onStart () en mi cuadro de diálogo personalizado:

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

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

Para interceptar los clics del botón, HeightDialog debe implementar View.OnClickListener

 public class HeightDialog extends Dialog implements View.OnClickListener { } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.