Использование Android getIdentifier()
Я пробовал это:
r = Resources.getSystem().getIdentifier("ball_red","drawable","com.Juggle2");
Log.i("FindBall","R = "+r);
И это:
r = Resources.getSystem().getIdentifier("com.Juggle2:drawable/ball_red", null, null);
Но 'r' всегда заканчивается как ноль.
Я вызываю эту строку из вспомогательного класса, не являющегося Activity, и ничего не расширяю, поэтому я не могу просто вызвать getResources()
, но я могу передать его из моего SurfaceView
.
В конце концов, я хочу заменить "ball_red"
на переменную, но сначала сначала. Это не работает.
com.Juggle2
- действительно мое имя пакета. drawable
- это папка res
, в которой она находится, и имя файла действительно ball_red
.
Р.Ява говорит:
public static final int ball_red=0x7f020027;
Поэтому я не уверен, почему он не работает.
Поэтому я не могу использовать ресурсы, я должен передать контекст, и я делаю так:
Внутри:
class Collection extends SurfaceView implements SurfaceHolder.Callback {
Я создаю новый экземпляр моего класса и передаю его getContext()
в качестве параметра.
Ответы
Ответ 1
Поскольку вы находитесь внутри действия, достаточно написать
int resId=YourActivity.this.getResources().getIdentifier("ball_red", "drawable", YourActivity.this.getPackageName());
или если вы не вызываете его из внутреннего класса
int resourceID = getResources().getIdentifier("ball_red", "drawable", getPackageName());
Примечание
getIdentifier() Returns 0 if no such resource was found. (0 is not a valid resource ID.)
Проверить
Также проверьте в своем R.java, есть ли drawable
с именем ball_red
например:
public static final class drawable {
public static final int ball_red=0x7f020000;
}
ИЗМЕНИТЬ
Если вы не в какой-либо деятельности, тогда вы должны пропустить a context instead of resources as parameter
, а затем сделать это
int resId=context.getResources().getIdentifier("ball_red", "drawable", context.getPackageName());
Ответ 2
Для пользователей Xamarin у меня возникла проблема, когда я добавил значок с заглавными и прописными буквами (например, iconVaccine.png) и имел в виду имя_базы имени nameVaccine.
Xamarin позволит вам сделать это (даже если вы этого не сделаете), но когда приложение будет скомпилировано, имя будет сплющено в нижнем регистре, поэтому вы должны обратиться к варианту нижнего регистра следующим образом:
Название изображения: iconVaccine.png
Ссылка на Xamarin: iconVaccine (как создается в Resource.designer.cs, но не работает)
Правильная ссылка: iconvaccine
Надеюсь, что это поможет!
Ответ 3
Хотя ответ от Festus Tamakloe верен, я нашел причуду в этой функции.
Если вы объявляете string-array
в XML файле, к нему следует обращаться, вызывая тип базового ресурса array
, используя string-array
приводит к возврату anid 0.