2012-09-05 6 views
10

hay muchas imágenes en un contenedor dibujable, por lo que en lugar de crear manualmente una matriz de todos los identificadores de recursos de imágenes, quiero obtener todas las imágenes dinámicamente de la carpeta dibujable en una matriz. Actualmente Im usando este código:obteniendo dinámicamente todos los identificadores de recursos de imágenes en una matriz

for(int i=1;i<=9;i++) 
    { 
      int imageKey = getResources().getIdentifier("img"+i, "drawable", getPackageName()); 
      ImageView image = new ImageView(this); 
      image.setId(imgId); 
      image.setImageResource(imageKey);  
      image.setScaleType(ImageView.ScaleType.FIT_XY); 
      viewFlipper.addView(image, new LayoutParams(LayoutParams.FILL_PARENT,    LayoutParams.FILL_PARENT)); 
      imgId++; 
     } 

pero en ese código que tenga que editar manualmente el nombre de la imagen para obtener el ID de recurso pero quiero obtener toda la imagen con cualquier nombre ..

Respuesta

16

Puedes Utilizar Reflection para lograrlo.

importar la clase Field

import java.lang.reflect.Field;

y luego escribir esto en su código

Field[] ID_Fields = R.drawable.class.getFields(); 
int[] resArray = new int[ID_Fields.length]; 
for(int i = 0; i < ID_Fields.length; i++) { 
    try { 
     resArray[i] = ID_Fields[i].getInt(null); 
    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

resArray[] ahora mantiene las referencias a todos los dibujables en su aplicación.

+0

muchas gracias hermano ... está funcionando ahora correctamente pero también busca el icono de la aplicación ... ¿hay alguna solución para ello? –

+0

simplemente obtiene todos los Id. Dibujables que incluyen el ícono. Tendrás que encontrar una forma de excluirlo en tu lógica (iterador/loop). –

+0

sí, también recibe el icono ... y también el archivo xml dibujable –

4

Bueno, si sus nombres son imágenes img1, img2 y así sucesivamente, entonces se puede crear una variable como

String url = "drawable/"+"img"+i; 

int imageKey = getResources().getIdentifier(url, "drawable", getPackageName()); 

también puede reemplazar el método de getPackageName() por el nombre del paquete como "com.android.resource"
Simplemente, la functi general es

public int getIdentifier(String name, String defType, String defPackage) 
Cuestiones relacionadas