¿Puede el sistema personalizado de Android admitir eventos de clic?
Sé cuál es tu problema. ¿Escribiste una clase que hereda Dialog y luego crea una instancia de este diálogo, pero agrega un oyente al botón? Si usted mismo heredó DIalog, ¡echemos un vistazo al código fuente! Dialog implementa DialogInterface, lo que significa que Dialog hereda la interfaz DialogInterface. Bien, echemos un vistazo a la interfaz DialogInterface nuevamente. Encontraremos que DialogInterface tiene un método: public static interface OnClickListener { public abstract void onClick(DialogInterface dialoginterface, int i}); Bien, es decir, si heredamos Dialog, también heredamos el método ONclickListner de la interfaz DialogInterface, por lo que cuando configuramos onclicklistner para el botón, se producirá un error, porque es algo en un paquete diferente. Ahora definitivamente se colocará. en una clase. ¡Algo puede salir mal! Solución: al configurar el evento de clic para el botón, ¡simplemente agregue el nombre completo del paquete! Aquí hay un ejemplo para que lo vea: En Actividad: public class QuestionActivity extends Activity { @Override public void onCreate(Bundle saveInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); public boolean onKeyDown(int keyCode, KeyEvent event) { Anuncio de diálogo = new MyDialog(this); ad.show(); return super.onKeyDown(keyCode, evento }} En el diálogo personalizado: public class MyDialog extiende el diálogo { Contexto de contexto); ; público MyDialog (contexto de contexto) { super(contexto); this.context = contexto; init(); } public void init() { LinearLayout ll = new LinearLayout(contexto); LayoutParams.WRAP_CONTENT)); Botón btn = nuevo Botón(contexto); btn.setText("hola"); ***** *************************************/ btn.setOnClickListener(nuevo android. view.View.OnClickListener() { @Override public void onClick(Ver vista) { Toast.makeText(contexto, "hola", 0)
.show(); MiDiálogo.this.dismiss(); **************************/ ll.addView(btn); this.setContentView(ll }}Tenga en cuenta el ***; ** línea interior