Botón creado dinámicamente de Android: setOnClickListener no funciona

¡El onClick nunca se dispara! Por qué no? Por favor, ayúdame.

 for(int i = 0; i < 12; i++) { String title = "Button" + i; Button sliderButton = new Button(this); sliderButton.setText(title); glideMenuTray.addView(sliderButton,100,40); sliderButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Log.d("gm", "Tapped "); } }); } 

No soy un experto en cosas como esta, pero es probablemente algo que ver con la recolección de basura, y el OnClickListeners pasar fuera del alcance.

Aunque no creo que puedas usar el enfoque súper fácil de onClickListeners que Dimitar menciona, probablemente puedas usar el enfoque intermedio que la sección a la que se vincula discute, aunque no es un enfoque nuevo. Para repetir el código de ejemplo aquí, es:

 View.OnClickListener handler = View.OnClickListener() { public void onClick(View v) { switch (v.getId()) { case R.id.myButton: // doStuff break; case R.id.myOtherButton: // doStuff break; } } } findViewById(R.id.myButton).setOnClickListener(handler); findViewById(R.id.myOtherButton).setOnClickListener(handler); 

Si la única cosa que distingue los botones es su texto del título, bien, usted podría utilizar eso para distinguir entre ellos en el método principal del onClick.

Además, no shure, una vez tuve un problema como ese en un TextView y fue porque no he añadido setClickable(true)

Mi código era algo así como

 TextView text = new TextView(this); text.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); text.setText("***"); text.setClickable(true); text.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //My action } }); myViewGroup.addView(text ); 

Espero que esto ayude

Si está usando Donut o Eclair, puede usar un detector de clics común, registrado en su Actividad y enganchado con sus botones en el XML de presentación.

Para referencia, mira aquí , la categoría Más fácil de hacer clic en los oyentes .

¿Tengo razón al suponer que la siguiente línea:

 glideMenuTray.addView(sliderButton,100,40); 

Agrega la vista a las coordenadas x: 100, y: 40 a algún View extendiendo ViewGroup?

En ese caso usted está apilando 12 botones encima de uno a, solamente el último botón (etiquetado Button11) será visible (y clickable).

Y siempre que la pregunta es de 3 años de edad realmente espero que ya ha resuelto esto por ahora 🙂

Configure setOnClickListener antes de agregar la vista.

 for(int i = 0; i < 12; i++) { String title = "Button" + i; Button sliderButton = new Button(this); sliderButton.setText(title); sliderButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Log.d("gm", "Tapped "); } glideMenuTray.addView(sliderButton,100,40); } 
  • Cambiar el fondo ListView - comportamiento extraño
  • Método onClick de Android
  • Android OnClickListener no dispara en GridView (sólo 2.2)
  • ¿Cómo abrir el menú deslizante en el evento de clic del botón?
  • Cómo poner un oyente onclick dentro de un servicio
  • Phonegap 2.4.0 con Android 4.2 - comportamiento de doble clic extraño
  • ¿Por qué OnClickListener en un ViewHolder no funciona?
  • Deshabilitar onMarkerClickListener completamente en Google Maps API v2
  • Inicie otra actividad haciendo clic en un botón
  • Evite que EditText consuma un evento de clic
  • ¿Cómo evitar disparar varias veces un evento onClick cuando el usuario presiona el botón más de una vez realmente rápido?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.