cómo acceder a los recursos dibujables por nombre en Android

En mi aplicación, necesito obtener algunos mapas de bits en algún lugar donde no quiera mantener la referencia R Así que creo una clase DrawableManager para administrar los dibujables.

 public class DrawableManager { private static Context context = null; public static void init(Context c) { context = c; } public static Drawable getDrawable(String name) { return R.drawable.? } } 

Entonces quiero obtener el dibujable por nombre en algún lugar como este (el car.png se coloca dentro de las res / drasables):

 Drawable d= DrawableManager.getDrawable("car.png"); 

Sin embargo, como puede ver, no puedo acceder a los recursos por el nombre:

 public static Drawable getDrawable(String name) { return R.drawable.? } 

Alguna alternativa?

Tenga en cuenta que su enfoque es casi siempre la manera incorrecta de hacer las cosas (mejor pasar el contexto en el objeto mismo que está utilizando el dibujable que mantener un Context estático en algún lugar).

Dado que, si desea realizar una carga dinámica dibujable, puede usar getIdentifier :

 Resources resources = context.getResources(); final int resourceId = resources.getIdentifier(name, "drawable", context.getPackageName()); return resources.getDrawable(resourceId); 

Podrías hacer algo como esto.-

 public static Drawable getDrawable(String name) { Context context = YourApplication.getContext(); int resourceId = context.getResources().getIdentifier(name, "drawable", YourApplication.getContext().getPackageName()); return context.getResources().getDrawable(resourceId); } 

Para acceder al contexto desde cualquier lugar, puede extender la clase de Aplicación.-

 public class YourApplication extends Application { private static YourApplication instance; public YourApplication() { instance = this; } public static Context getContext() { return instance; } } 

Y asócielo en su etiqueta de application Manifest

  

Modificar el contenido de la imagen:

  ImageView image = (ImageView)view.findViewById(R.id.imagenElement); int resourceImage = activity.getResources().getIdentifier(element.getImageName(), "drawable", activity.getPackageName()); image.setImageResource(resourceImage);