Доступ к имени ресурса программно

У меня много массивов строк в моих файлах ресурсов, и я хочу получить к ним доступ программно в зависимости от ввода пользователем.

int c = Getter.getCurrentNumber();
String[] info = getResources().getStringArray(R.array.n_<c>);

Итак, если c == 12, информация должна быть строковым массивом с именем "n_12". Есть ли способ сделать это и избегать делать оператор switch с сотнями случаев?

Спасибо

Ответ 1

Вы можете получить идентификатор ресурса таким образом

int c = Getter.getCurrentNumber();
String resource = "n_" + c;
int id = getResources().getIdentifier(resource, "array", "com.your.project");

Затем просто используйте этот id

String[] info = getResources().getStringArray(id);

Посмотрите здесь для другого примера на getResources().getIdentifier().

Ответ 2

Если вы хотите получить ресурс по имени (программно), и вы не знаете, как обращаться к ресурсу по имени (но вы знаете, как получить к нему доступ с помощью R.), вы можете сделать это:

  • Сначала напечатайте точное имя ресурса, например:

Log.d("", context.getResources().getResourceName(R.id.whichYouAlreadyKnow) );

(Примечание: R.id.whichYouAlreadyKnow может быть R.string. * R.drawable. * и т.д.)

Теперь вы знаете точное имя ресурса

  • Возьмите напечатанное имя и используйте его как есть:

int id = getResources().getIdentifier(resource_name_that_printed_above, null, null);

Приветствия