2010-11-07 21 views
5

Tengo una pregunta que me está volviendo loco.Acceso dinámico a los elementos del diseño

Tengo una gran cantidad 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.

acceso a uno, es muy fácil, añadiendo esto:

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

Mi pregunta es, si se puede establecer dinámicamente la cadena de ID (R.id.Btn7) para poner en una pueden obtener los botones para y, por ejemplo, cambiar el color .... algo como esto:

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 cómo es exactamente la cadena se puede montar

R.id.Btn + i 

para trabajar.

Muchas gracias.

Respuesta

13

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

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

Alternativamente se puede preparar una matriz con todos los identificadores que necesita y elementos de acceso de la 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]); 
+0

Gracias por la respuesta. Yo uso este y trabajo !! –

+0

Gracias, encontré esto realmente útil para cargar recursos dinámicamente. –

2

Dale un identificador a su disposición ("diseño" en el ejemplo a continuación) y luego iterar sobre todos los niños pueden tocar utilizando 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); 
    } 
} 
Cuestiones relacionadas