Ответ 1
Нельзя использовать имя пакета библиотеки. Вместо этого попробуйте:
resId = getResources().getIdentifier("fr_200_133", "drawable", getPackageName());
(или getContext().getPackageName()
, если это выполняется в представлении).
У меня есть проект Android (com.appocaliptic.quizknife.app), в котором используется Android-библиотека (com.appocaliptic.quizknife.core).
То, что я пытаюсь сделать, - это получить идентификатор ресурса, который является библиотекой. Путь к изображению: res/drawable-xhdpi/fr_200_133.png
Однако все попытки с результатом getIdentifier 0. Где проблема?
resId = getResources().getIdentifier("fr_200_133", "drawable", "com.appocaliptic.quizknife.core");
resId = getResources().getIdentifier("com.appocaliptic.quizknife.core:drawable/"+"fr_200_133", null, null);
resId = getResources().getIdentifier("drawable/fr_200_133", null, "com.appocaliptic.quizknife.core");
Отредактировано:
Ach, а в R.java имеется атрибут drawable и corensponding.
Нельзя использовать имя пакета библиотеки. Вместо этого попробуйте:
resId = getResources().getIdentifier("fr_200_133", "drawable", getPackageName());
(или getContext().getPackageName()
, если это выполняется в представлении).
Я столкнулся с той же проблемой: "результат getIdentifier 0" , и я решил его, удалив расширение изображения (*.jpg, *.jpeg,... и т.д.), чтобы соответствовать имени в файле R.java
Я получал ту же ошибку, и единственное, что работало, происходило по-другому:
resourceId = R.drawable.class.getField("fr_200_133").getInt(null);
У меня была аналогичная проблема. Я мог бы решить это, как это заметил Хусам Отри. Например:
//This doesn't work
context.getResources().getIdentifier("audio_1.mp3", "raw", this.getPackageName());
//This works (strip off the file extension)
context.getResources().getIdentifier("audio_1", "raw", this.getPackageName());