Вызов ресурса по строке?

1

Здесь настройка. У меня есть счетчик, и каждый элемент в spinner связан со своим собственным StringArray. Я хочу оптимизировать процесс загрузки StringArray, когда элемент выбран в счетчике, не используя кучу операторов if для каждого элемента.

У StringArray есть то же имя, что и текст элемента spinner

Нарисовано это будет выглядеть так:

String cat = parent.getItemAtPosition(pos).toString(); //Selected Spinner item (Category)

...

String catStringArray = "R.array." + cat;
listdata = getResources().getStringArray(catArray);  //Get the StringArray

Есть ли способ сделать это правильно?

- Edit-- @EboMike

Ваш ответ отправил меня на охоту и наткнулся на это, которое я сейчас использую:

Class res = R.array.class;
Field field = res.getField(selectedCategory);
int saId = field.getInt(null);
String[] myList = getResources().getStringArray(saId);
Теги:
string
arrays
resources

1 ответ

2
Лучший ответ

Это не отличный подход. Это медленно. Было бы лучше иметь внутренний целочисленный массив со всеми идентификаторами R.string или что-то подобное.

Если вы действительно настаиваете на использовании строкового подхода, используйте Resources.getIdentifier(). Технически это не очень важно, если вы делаете это только один раз.

  • 0
    Upvoted - есть, конечно, некоторые случаи, когда требуется динамический ресурс, и использование getIdentifier также может уменьшить обслуживание. Просто не забудьте проверить, является ли возвращаемое значение 0.
  • 0
    обновил мой оригинальный пост: D

Ещё вопросы

Сообщество Overcoder
Наверх
Меню