#java #android
#java #Android
Вопрос:
Я пытаюсь получить доступ к строковым переменным, используя динамические имена, в зависимости от того, в какой позиции находится моя галерея. Чтобы получить значение строки, используя фиксированное имя, я использую следующее, которое подходит (строка называется pic1info):
String strTest = getResources().getString(R.string.pic1info);
Мои строки называются pic1info, pic2info, pic3info и т.д., И я хочу заменить статическое определение pic1info, включающее позицию, поэтому передайте содержимое следующей строки вместо pic1info выше, чтобы она возвращала другую строку в зависимости от текущей позиции:
String strDynamicStringName= "pic" position "info";
В javascript эквивалентом было бы eval , я уверен, что есть простой способ сделать это, но я не могу понять, как!
Большое спасибо за вашу помощь, как всегда!
Дэйв
Ответ №1:
используйте это: android.content.res.Resources.getIdentifier
int resID = getResources().getIdentifier("pic" position "info", "string", getPackageName());
String strTest = getResources().getString(resID);
Комментарии:
1. Этот ответ намного медленнее, поскольку он потребует использования отражения в Java. Будьте очень осторожны, используя этот метод в производственном коде.
Ответ №2:
Нет, простого способа сделать это в Java нет, но вы можете создать массив целых чисел, где каждый индекс представляет R-значение этой строки.
private static final int[] LOOKUP_TABLE = new int[] {
R.string.pic1info,
R.string.pic2info,
R.string.pic3info,
R.string.pic4info
};
Получение строки тогда стало бы:
String strTest = getResources().getString(LOOKUP_TABLE[position]);
Ответ №3:
Вдохновленный ответом Kaj, вы также можете поместить массив строк в свой XML-файл:
<resources>
<string-array name="picInfos">
<item>value of pic1info goes here</item>
<item>value of pic2info goes here</item>
<item>value of pic3info goes here</item>
</string-array>
</resources>