¿Cómo acceder a recurso con nombre dinámico en mi caso?

Si obtengo el nombre de la imagen como una variable como la siguiente:

var imageName = SERVICE.getImg(); 

Entonces, ¿cómo puedo obtener el recurso con R.drawable.???? , Intenté R.drawable[imageName] , pero falló. ¿Alguna sugerencia?

 int id = getResources().getIdentifier(imageName, type, package); 

Esto le proporcionará el ID del recurso que está buscando. Con él, puede acceder al recurso desde la clase R.

Usando sólo el parámetro name :

También puede incluir todas las 3 informaciones en el parámetro "name" utilizando el siguiente formato: "package:type/image_name" , algo así como:

 int id = getResources().getIdentifier("com.my.app:drawable/my_image", null, null); 

Esto es útil cuando se trabaja con componentes externos o bibliotecas que no se pueden o no quieren cambiar cómo se llama a getIdentifier() . Por ejemplo: AOSP Launcher3

Prueba esto:

 int id = getResources().getIdentifier(imageName, "drawable", getPackageName()); 

Necesitas reflexionar.

Supongamos que tiene R.drawable.image1, si desea acceder a ella a través del nombre de cadena "image1", debería funcionar:

 String Name = "image1"; int id = R.drawable.class.getField(Name).getInt(null); 

Pero note que sólo obtener el Id de la imagen, todavía necesita el inflador para obtener el actual estirable de ella.

Utilice esta función

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

Puede utilizar el método getIdentifier que le dará la identificación del recurso por su nombre. Compruebe este hilo para obtener más detalles.

  • Appwidget listview filas que no se actualizan o cargan después de la actualización de Marshmallow
  • ¿Cómo mostrar un diseño encima del otro programmatically en mi caso?
  • ImeOptions "actionNext" por programa - cómo saltar al siguiente campo?
  • ¿Cómo solucionar el error "proceso es malo" para un Widget de Android?
  • Diseño relativo ignorando setMargin ()
  • Actualizar datos en Arrayadapter
  • Menú contextual de un ListFragment
  • Deshabilite la capacidad de edición y el enfoque de EditText (como TextView)
  • Estilo personalizado para Android TabWidget
  • Poner cualquier vista sobre un VideoView en Android
  • Crear barra de búsqueda persistente en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.