Получить идентификатор ресурса из значения - PullRequest
10 голосов
/ 11 октября 2010

У меня действительно много специфичных для языка ресурсов.В моих приложениях для Android есть один момент, когда я получаю значение ресурса и мне нужно преобразовать это значение в соответствующий идентификатор.Значение не обязательно находится в специфичном для языка файле для текущего языка (en / de / ...).Это где-то там ... и уникально.

После прочтения документации и этой темы " Как получить идентификатор ресурса с известным именем ресурса? " Я думал, что getIdentifier(String name, String defType, String defPackage)это правильный путь, но я не могу заставить его работать.Результат всегда "0".

Этот код является частью действия, и я работаю на Android 2.2.

Возможно ли, что Android не учитывает все файлы ресурсов ивыполняет поиск только в текущем языке?

Например (текущий язык - "de"):

File: values-en/strings.xml
<resources>
   <string name="txt_afirsttext">A first text</string>
   <string name="txt_asecondtext">A second text</string>
</resources>

File: values-de/strings.xml
<resources>
   <string name="txt_afirsttext">Ein erster Text</string>
   <string name="txt_asecondtext">Ein zweiter Text</string>
</resources>

// Now I want to find the ID to this "en" text ...
String testValue = "A second text";
int i = this.getResources().getIdentifier(testValue, "strings", this.getPackageName());

// ... and translate it to the actual "de" language
String translatedValue = this.getResources().getString(i);

Чтобы все было понятно.Я не хочу пропустить использование строковых ресурсов в качестве базы данных.Это только одна часть, которая встречается в очень редких ситуациях.

Ответы [ 2 ]

29 голосов
/ 11 октября 2010

Вы используете getIdentifier неправильно. Вы указываете не текст, а идентификатор текста, в вашем случае это будет txt_afirsttext или txt_asecondtext .

int i = this.getResources().
             getIdentifier("txt_asecondtext", "string", this.getPackageName());

Я думаю, что нет способа найти идентификатор ресурса String по его содержимому. Это было бы похоже на прохождение потока байтов, чтобы найти отрисовку.

Нужно ли вашему приложению этот странный способ получения ресурсов? Я вполне уверен, что вы могли бы использовать лучший подход для динамической загрузки ресурсов, хотя ваш первый абзац описывает ваш сценарий как загадочный:)

редактировать: ответ исправлен. Спасибо тдрозу за исправление.

11 голосов
/ 14 марта 2011

Одно незначительное, но важное исправление к примеру кода выше: тип ресурса должен быть единственным, а не множественным.т. е. «строка» вместо «строки» - то же самое относится к drawable, id, массиву и т. д.

Например

int i = this.getResources().getIdentifier(testValue, "string", this.getPackageName());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...