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 "); } }); } 

5 Solutions collect form web for “Botón creado dinámicamente de Android: setOnClickListener no funciona”

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); } 
  • Array @OnClick con identificadores opcionales (ButterKnife)
  • ¿Diferencia entre el evento OnClick () y OnClickListener?
  • ¿Cómo puedo inhabilitar todos los eventos táctiles en todos los niños de un ViewGroup?
  • Cerrar Spinner en clic fuera de Spinner
  • Android - Bloques de CheckBox ExpandableListView.OnGroupClickListener
  • La forma más fácil de tener el botón de abrir el navegador a la URL específica
  • ¿Cómo pasar el evento onClick a su padre en Android?
  • ¿Hay una manera de simular un clic en la pantalla en el dispositivo Android a través de código?
  • OnItemClickListener usando ArrayAdapter para ListView
  • Android: No se puede obtener un encabezado / pie de lista ListView que se puede hacer clic
  • ¿Cómo exactamente el atributo android: onClick XML difiere de setOnClickListener?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.