Динамическая загрузка ресурсов 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.