Как получить доступ к ресурсам по имени в android

В моем приложении мне нужно получить некоторые растровые рисунки где-нибудь, где я не хочу сохранять ссылку R Поэтому я создаю класс DrawableManager для управления чертежами.

 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.? } } 

Затем я хочу получить доступное имя по имени где-то вроде этого (car.png помещается внутри res / drawables):

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

Однако, как вы можете видеть, я не могу получить доступ к ресурсам по имени:

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

Какие-нибудь альтернативы?

Solutions Collecting From Web of "Как получить доступ к ресурсам по имени в android"

Обратите внимание, что ваш подход почти всегда является неправильным способом делать вещи (лучше передать контекст самому объекту, который использует drawable, чем где-то хранить статический Context ).

Учитывая, что если вы хотите сделать динамическую загружаемую загрузку, вы можете использовать getIdentifier :

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

Вы могли бы сделать что-то вроде этого.

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

Чтобы получить доступ к контексту из любого места, вы можете расширить Application class.-

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

И сопоставьте его в теге application Manifest

 <application android:name=".YourApplication" .... 

Изменить содержание изображения:

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