#android #string #textview
#Android #строка #textview
Вопрос:
Каков наилучший способ ссылаться на строковые ресурсы (xml) в Android, используя метод объединения путей?
Сценарий
У меня есть несколько строковых ресурсов в xml:
<string name="testString1">Test 1</string>
<string name="testString2">Test 2</string>
<string name="testString3">Test 3</string>
В моем приложении я хочу, чтобы пользователь выбирал, какой строковый ресурс возвращать, на основе их выбора. Тем не менее, будут сотни вариантов. Итак, я ищу какой-то:
textView.setText(getString(R.string.testString selection));
Любые предложения приветствуются,
Приветствия
Ответ №1:
Из документации getIdentifier для Android.
getIdentifier
public int getIdentifier (String name, String defType, String defPackage)
Возвращает идентификатор ресурса для данного имени ресурса. Полностью
точное имя ресурса имеет вид «пакет: тип / запись». Первый
два компонента (package и type) являются необязательными, если defType и
Здесь указаны defPackage, соответственно.
Решение: Напишите метод для получения спроектированной строки на основе заданного выбора, такого как 1, 2, 3.
public String getStringBasedOnSelection(int selection) {
String name = "testString" selection;
int resId = getResources().getIdentifier(name, "string", getPackageName());
return getString(resId);
}
Использовать в коде
Log.i(TAG, getStringBasedOnSelection(1));
Log.i(TAG, getStringBasedOnSelection(2));
Log.i(TAG, getStringBasedOnSelection(3));
Ответ №2:
Сделайте все три одной строкой этого
<string name="testString">Test %d</string>
И подобное использование
textView.setText(String.format(getString(R.string.project_id), selection)));
Ответ №3:
Вы хотите получить строковый идентификатор ресурса, который всегда является целым числом, с помощью строки. Давайте предположим, что вы находитесь внутри класса Activity:
int id = getResources().getIdentifier(selection, "string", getPackageName());
if (id != -1)
{
textView.setText(getString(id));
}
getResources()
это метод, определенный в Context
классе, который возвращает Resources
объект. Поскольку я предположил, что вы работаете внутри Activity
класса, который является подклассом Context
, вы можете вызывать getResources()
, а также getString()
без префикса Context
экземпляра.
Resources
это класс, который определяет набор методов, которые теперь полезны для вас, таких как getIdentifier
. Взгляните на официальную документацию. Будьте осторожны, проверяя наличие несуществующих ресурсов. Этот метод возвращает -1, если ресурс не удалось найти!!