getString () с присоединением пути? - PullRequest
0 голосов
/ 09 марта 2019

Каков наилучший способ ссылки на строковые ресурсы (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));

Любые предложения приветствуются
Приветствия

Ответы [ 3 ]

1 голос
/ 09 марта 2019

Из 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));
0 голосов
/ 09 марта 2019

Вы хотите получить строковый идентификатор ресурса, который всегда является целым числом.Предположим, вы находитесь внутри класса Activity:

int id = getResources().getIdentifier(selection, "string", getPackageName());
if (id != -1)
{
    textView.setText(getString(id));
}

getResources() - это метод, определенный в классе Context, который возвращает объект Resources.Поскольку я предполагал, что вы работаете внутри класса Activity, который является подклассом Context, вы можете вызывать getResources(), а также getString(), без префикса Context instance.

Resources - это класс, который определяет набор методов, которые теперь вам полезны, например getIdentifier.Взгляните на официальную документацию .Будьте внимательны, чтобы проверить наличие несуществующих ресурсов.Этот метод возвращает -1, если ресурс не может быть найден !!

0 голосов
/ 09 марта 2019

Сделайте все три одной строки это

<string name="testString">Test %d</string>

И использование, как это

textView.setText(String.format(getString(R.string.project_id), selection)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...