getString() с присоединением пути?

#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, если ресурс не удалось найти!!