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

Использование 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() в качестве параметра.

4b9b3361

Ответ 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.