Intereting Posts
Ошибка в strings.xml: недопустимый символ 'continue' Что делать, если производитель удаляет папки под папкой / dev / log? Как найти планшет или телефон в Android, программно? Проблемы с getLine1Number () для получения номера телефона устройства Кинжал не может вводить поле параметра типа Панель перекрытия панели инструментов Полупрозрачные TextureView не работают Ионный сбор Android | Ошибка: не найдены установленные инструменты сборки. Установите инструменты для сборки Android Как читать голосовые сообщения программно в Android Как я могу (и привязывать) удаленный сервис в android, который реализован в другом приложении (другой пакет)? Служба Android работает, но она не отображается в настройках -> запущенные службы Как создать активность настроек для Android Live Wallpaper WebView Cache не работает в Android 4.4 Используйте ADB, чтобы проверить, включен ли режим полета? Проблемы с интеграцией EnhancedListView и SwipeRefreshLayout

Как получить доступ к ресурсам по имени в 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.? } 

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

Обратите внимание, что ваш подход почти всегда является неправильным способом делать вещи (лучше передать контекст самому объекту, который использует 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);