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