2011-01-18 8 views
24

En el código Java de un proyecto Android si quieres la petición de recursos vista se puede hacer algo como:Android y obtener una vista con yeso Identificación como una cadena

View addButton = findViewById(R.id.button_0); 

En lo anterior R.id .button_0 no es una cadena. ¿Es posible hacer referencia dinámicamente a un recurso por una cadena, como "R.id.button_0"?

Me gustaría referirme a un botón por "R.id.button_%i" donde %i es reemplazado por algún índice válido.

Respuesta

52
int resID = getResources().getIdentifier("button_%i", 
    "id", getPackageName()); 
View addButton = findViewById(resID); 

donde %i se reemplaza por un índice válido.

El método getResources() pertenece a la clase Context, por lo que puede usarlo directamente desde Activity. Si no está dentro de una actividad, a continuación, utilizar un contexto para acceder a: (myCtxt.getResources()).

+0

@Christian: Gracias. Perfecto. – SK9

+3

Tenga en cuenta que esto va a ser significativamente más lento que usar la ID directamente. – hackbod

+0

Gracias, justo lo que estaba buscando. Por cierto, he reparado un error de compilación en este ejemplo de código. –

4

usted podría intentar poner todos los identificadores que desea en una matriz y luego usar esa matriz para referirse de forma dinámica a sus recursos en su lugar.

+0

Esto podría ser un buen enfoque para algunas ocasiones especiales (cuando el nombre de los cambios de recursos o el orden es compleja); de lo contrario, creo que no es la mejor manera de hacerlo. Algunas veces terminará con una gran variedad que hace que su código se vea mal. – Cristian

+0

@cristian realmente hace un código desagradable horrible. Donde hice esto en el pasado, lo empujé en su propia clase estática. Pero su enfoque parece algo más agradable;) – jsonfry

+1

en ambos sentidos el olor. :) – Qberticus

Cuestiones relacionadas