2010-09-06 12 views
29

¿Cómo puedo hacer esto:Recurso dinámico Cargando Android

Estoy tratando de encontrar una manera de abrir recursos cuyo nombre se determina en tiempo de ejecución solamente.

Voy a explicar con más detalles

Quiero tener un XML que hace referencia a un montón de otros archivos XML en el apk aplicación.

Con el propósito de explicar digamos que el XML principal es main.xml y el otro XML es file1.xml file2.xml, fileX.xml.

Lo que quiero es leer main.xml, extraer el nombre del XML que quiero (fileX.xml) por ejemplo. Y luego lea fileX.XML.

El problema que enfrentamos es que lo que en Extraer de main.xml es una cadena y no puedo encontrar una manera de cambiar eso a R.raw.nameOfTheFile

Alguien tiene una idea?

no quiero a:

  • reagrupan todo en un gran archivo XML
  • hardcode main.xml en un caso enorme interruptor que conecta un número/cadena para el ID de recurso
+0

me enfrenté a un problema similar pero no recibo ninguna respuesta aceptada para esto. ¿Alguien puede comenzar generosamente por esta pregunta? –

Respuesta

51

no he utilizado con archivos rAW o archivos del formato XML, pero para dibujables Puedo usar este:

getResources().getIdentifier("fileX", "drawable","com.yourapppackage.www"); 

para obtener el identificador (R.id) del recurso. Tendrá que reemplazar Drawable con otra cosa, tal vez raw o layout (no probado).

+0

Gracias por la respuesta que funciona muy bien. Para aquellos en el mismo caso [aquí hay una buena explicación sobre el tema] (http://www.anddev.org/tinytut_-_get_resources_by_name__getidentifier_-t460.html) (una vez que tuve el nombre de la función era simple): ' getResources(). getIdentifier ("fileX", "raw", paquete de aplicaciones); ' –

+1

¿Enlace muerto? @JasonRogers Ah, nvm - debería ser http://www.anddev.org/tinytut_-get_resources_by_name__getidentifier-t460.html – aaronsnoswell

+1

no está muerto link casperOne eliminó mi publicación y la cambió a un comentario sin tomarse el tiempo para hacerlo correctamente (también conocido como enlace roto) aquí está el enlace: http://www.anddev.org/tinytut_-_get_resources_by_name__getidentifier_-t460.html –

23

escribí este método práctico pequeño ayudante para encapsular esto:

public static String getResourceString(String name, Context context) { 
    int nameResourceID = context.getResources().getIdentifier(name, "string", context.getApplicationInfo().packageName); 
    if (nameResourceID == 0) { 
     throw new IllegalArgumentException("No resource string found with name " + name); 
    } else { 
     return context.getString(nameResourceID); 
    } 
} 
+0

Muy útil, gracias, pero nunca nos gustaría una cadena. a veces un flujo sería mejor. –

6

Hay otro método:

int drawableId = R.drawable.class.getField("file1").getInt(null); 

Según this blog es 5x veces más rápido que el uso de getIdentifier.

Cuestiones relacionadas