Динамическая загрузка ресурсов Android

Я пытаюсь найти способ открыть ресурсы, имя которых определяется только во время выполнения.

В частности, я хочу иметь XML, который ссылается на кучу других XML файлов в приложении apk. С целью объяснения, допустим, основным XML является main.xml а другой XML - file1.xml, file2.xml и fileX.xml. Я хочу прочитать main.xml, main.xml, извлечь имя XML, которое я хочу (fileX.xml), а затем прочитать fileX.xml. Проблема, с которой я сталкиваюсь, заключается в том, что то, что я извлекаю из формы main.xml является строкой, и я не могу найти способ изменить это на R.raw.nameOfTheFile.

У кого-нибудь есть идея?

Я не хочу:

  • перегруппируйте все в один огромный XML файл
  • hardcode main.xml в огромном случае коммутатора, который связывает номер/строку с идентификатором ресурса

Ответ 1

Я не использовал его с сырыми файлами или файлами макета xml, но для drawables я использую это:

getResources().getIdentifier("fileX", "drawable","com.yourapppackage.www");

чтобы получить идентификатор (Rid) ресурса. Вам нужно будет заменить drawable на что-то еще, возможно, raw или layout (untested).

Ответ 2

Я написал этот удобный небольшой вспомогательный метод, чтобы инкапсулировать это:

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

Ответ 3

Существует еще один способ:

int drawableId = R.drawable.class.getField("file1").getInt(null);

В соответствии с этот блог в 5 раз быстрее, чем с помощью getIdentifier.