R.string; получить строку из имени динамического ключа

Возможный дубликат:
Динамический ресурс Загрузка Android

В Android я могу загрузить строку из ресурсов с помощью String s = getString(R.string.keyName). Но у меня есть список категорий в моей базе данных, каждый из которых имеет имя. Как я могу взять это название категории, а затем загрузить на него соответствующий строковый ресурс, чтобы он работал для локализации?

В принципе, мне нужно, чтобы keyName был динамическим; моя собственная переменная String. Это возможно? Спасибо.

Ответ 1

Поскольку ваши ресурсы не могут быть динамически, вы можете использовать оператор switch, например:

String name = "";
switch (row.getNameKey()) {
case keyName1:
    name = getString(R.string.keyName1);
    break;
case keyName2:
    name = ...
    ...
}

Другим подходом может быть метод getIdentifier: http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier%28java.lang.String,%20java.lang.String,%20java.lang.String%29

и посмотрите: Android: доступ к string.xml с именем переменной

Ответ 2

Вы можете использовать Java Reflection, чтобы превратить строку в идентификатор ресурса. Если вы заранее знаете, что это строка, скажем R.string.theName, и у вас есть ключевое имя "theName", вам просто нужно использовать отражение на "your.package.com.R.string" (где "ваш". package.com "- это имя пакета, определенное в AndroidManifest.xml), чтобы найти класс, а затем использовать отражение, чтобы получить от него статический член" theName ". Полученное вами значение может быть передано в метод getString().