Android: Usar findViewById () con una cadena / en un bucle

Estoy haciendo una aplicación de Android, donde hay una vista compuesta de cientos de botones, cada uno con una devolución de llamada específica. Ahora, me gustaría establecer estas devoluciones de llamada utilizando un bucle, en lugar de tener que escribir cientos de líneas de código (para cada uno de los botones).

Mi pregunta es: ¿Cómo puedo utilizar findViewById sin tener que escribir de forma estática cada ID de botón? Esto es lo que me gustaría hacer:

for(int i=0; i<some_value; i++) { for(int j=0; j<some_other_value; j++) { String buttonID = "btn" + i + "-" + j; buttons[i][j] = ((Button) findViewById(R.id.buttonID)); buttons[i][j].setOnClickListener(this); } } 

¡Gracias por adelantado!

Usted debe usar getIdentifier()

 for(int i=0; i<some_value; i++) { for(int j=0; j<some_other_value; j++) { String buttonID = "btn" + i + "-" + j; int resID = getResources().getIdentifier(buttonID, "id", getPackageName()); buttons[i][j] = ((Button) findViewById(resID)); buttons[i][j].setOnClickListener(this); } } 

Puede intentar hacer un int [] que contenga todos sus identificadores de botón y luego iterar sobre eso:

 int[] buttonIDs = new int[] {R.id.button1ID, R.id.button2ID, R.id.button3ID, ... } for(int i=0; i<buttonIDs.length; i++) { Button b = (Button) findViewById(buttonIDs[i]); b.setOnClickListener(this); } 

Echa un vistazo a estas respuestas:

  • Android y obtener una vista con id cast como una cadena
  • Array de ImageButtons, asignar R.view.id desde una variable

Puede utilizar etiqueta si desea acceder.

En onClick

 int i=Integer.parseInt(v.getTag); 

Pero no puedes acceder a ese botón como este.

Simplemente cree el botón programáticamente

Por Button b=new Button(this);

Crear el botón personalizado en el código java más bien en Xml como se muestra a continuación

 Button bs_text[]= new Button[some_value]; for(int z=0;z<some_value;z++) { try { bs_text[z] = (Button) new Button(this); } catch(ArrayIndexOutOfBoundsException e) { Log.d("ArrayIndexOutOfBoundsException",e.toString()); } } 

Si su vista de nivel superior sólo tiene las vistas de los botones como niños, podría hacerlo

 for (int i = 0 ; i < yourView.getChildCount(); i++) { Button b = (Button) yourView.getChildAt(i); b.setOnClickListener(xxxx); } 

Si hay más vistas presentes que usted necesita comprobar si el seleccionado es uno de sus botones.

  • ¿Cómo aclarar un botón?
  • Centrar verticalmente el texto excesivo en los botones de Android
  • Botón de ondulación de androide con fondo
  • Necesita ayuda con el botón de retroactiva para volver a la vista web
  • Establecer la transparencia en los botones de android
  • Agregue un botón dinámicamente a un LinearLayout en Android
  • Centrar un dibujable en un botón con fondo y sin texto
  • ¿Cómo desactivar el botón de clic?
  • Android - Escuchar un botón inhabilitado
  • Android ExpandableListView Parent con botón
  • Diferente método para establecer OnClickListener de un botón en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.