Acceso dinámico a los elementos del diseño

Tengo una pregunta que me está volviendo loco.

Tengo un gran número de botones (10, más o menos) en mi pantalla, dentro de un TableRow.

Necesito acceder a ellos, y tenía planeado realizar a través de un bucle.

El acceso a uno, es muy fácil, agregando esto:

boton7 = (Button) findViewById (R.id.Btn7) 

Mi pregunta es, si se puede establecer dinámicamente la cadena id (R.id.Btn7) para poner en un puede obtener los botones para, y por ejemplo, cambiar el color …. algo así:

 for (int i = 0; i <10; i + +) { Button eachBoton= (Button) findViewById (R.id.Btn + i); eachBoton. setBackgroundColor (Color.Red); } 

Eso, por supuesto, no funciona … mi pregunta es si alguien sabe exactamente cómo se puede montar la cadena

 R.id.Btn + i 

trabajar.

Muchas gracias.

Puede utilizar Ressources::getIdentifier() para obtener un identificador de recurso para el nombre de recurso dado:

 int ressourceId = getResources().getIdentifier( "Btn"+i, "id", this.getContext().getPackageName()); Button button = (Button) findViewById(ressourceId); 

Alternativamente, puede preparar una matriz con todos los ids que necesita y acceder a los elementos de esa matriz. Esto es más eficiente:

 private final int[] btns = {R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4, ...} ... Button button = (Button) findViewById(btns[i]); 

Dé un identificador a su disposición ("disposición" en el ejemplo abajo) y después iterate sobre todos los niños getTouchables usando getTouchables . Si es un botón, cambia el color.

 View layout = findViewById(R.id.layout) ArrayList<View> touchables = layout.getTouchables(); for (View b : touchables) { if (b instanceof Button) { b.setBackgroundColor(Color.Red); } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.