Android: установить идентификатор строки ресурса из ArrayList? - PullRequest
1 голос
/ 02 февраля 2011

Я уверен, что есть лучший способ сделать это, но я совсем новичок в программировании, поэтому заранее прошу прощения за мою нелюбовь.

Вот моя проблема:

У меня есть ArrayList, заполненный параметрами имени моих строк в strings.xml, я пытаюсь заполнить TextView с помощью .setText (), используя идентификатор ресурса, который динамически создается из части моего массива , Например ...

ArrayList<String> options = new ArrayList<String>();
options.add("bacon");
options.add("ham");

//R.id.option1 is in my layout and R.string.bacon is in my strings.xml
TextView option1 = (TextView)findViewById(R.id.option1);
option1.setText(R.string.(options.get(0)));

Это не мой полный код, очевидно. Это просто пример, с которым сталкивается та же проблема.

Есть идеи?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 02 февраля 2011

В качестве идеи вместо массива имен String у вас может быть массив int с идентификаторами ресурсов:

ArrayList<Integer> options = new ArrayList<Integer>();
options.add(R.string.bacon);
options.add(R.string.ham);

//R.id.option1 is in my layout and R.string.bacon is in my strings.xml
TextView option1 = (TextView)findViewById(R.id.option1);
option1.setText(options.get(0));
0 голосов
/ 02 февраля 2011

Похоже, вы хотите искать идентификатор ресурса по имени, чтобы вы могли использовать его в вызовах, которые ожидают целочисленный идентификатор (например, в findViewById ()):

Resources.getIdentifier ()

public int getIdentifier (String name, String defType, String defPackage)
Since: API Level 1

Возвращает идентификатор ресурса для данного имени ресурса. Полное имя ресурса имеет форму «пакет: тип / запись». Первые два компонента (package и type) являются необязательными, если здесь указаны defType и defPackage соответственно. Примечание: использование этой функции не рекомендуется. Гораздо эффективнее получать ресурсы по идентификатору, чем по имени.

Примеры:

String name = "bacon";
int id = resources.getIdentifier(name, "string", "com.package");
if (id == 0) {
    Log.e(TAG, "Lookup id for resource '"+name+"' failed";
    // graceful error handling code here
}

или

String fullyQualifiedResourceName = "com.package:string/bacon";
int id = resources.getIdentifier(title, null, null);
if (id == 0) {
    Log.e(TAG, "Lookup id for resource '"+fullyQualifiedResourceName+"' failed";
    // graceful error handling code here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...