Подтвердить что ты не робот

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

Если я получаю имя изображения как переменную, например:

var imageName = SERVICE.getImg();

Затем, как я могу получить ресурс с помощью R.drawable.????, я попробовал R.drawable[imageName], но это не удалось. Любые предложения?

4b9b3361

Ответ 1

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

Это даст вам идентификатор ресурса, который вы ищете. С его помощью вы можете получить доступ к ресурсу из класса R.

Используя только параметр name:

Вы также можете включить все 3 информации в параметр "имя", используя следующий формат: "package:type/image_name", что-то вроде:

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

Это полезно, когда вы работаете с внешними компонентами или библиотеками, которые вы не можете или не хотите изменять, как вызывается getIdentifier(). например: AOSP Launcher3

Ответ 2

Попробуйте следующее:

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

Ответ 3

Вам нужно отражение.

Предположим, что у вас есть R.drawable.image1, если вы хотите получить к нему доступ через строковое имя "image1", следующее должно работать:

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

Но заметьте, что он получает только идентификатор изображения, вам все равно нужен надувной элемент, чтобы получить от него реальную выгоду.

Ответ 4

Используйте эту функцию

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

Ответ 5

Вы можете использовать метод getIdentifier, который даст вам идентификатор ресурса по его имени. Проверьте этот поток для более подробной информации.