2011-01-18 3 views
24

В коде Java андроида проекта, если вы хотите ссылку для просмотра ресурса, который вы можете сделать что-то вроде:Android и получить представление с идентификатором гипсом в виде строки

View addButton = findViewById(R.id.button_0); 

В вышеприведенном R.id .button_0 не является строкой. Можно ли динамически ссылаться на ресурс с помощью строки, например «R.id.button_0»?

Я хочу обратиться к кнопке «R.id.button_%i», где %i заменен на действительный индекс.

ответ

52
int resID = getResources().getIdentifier("button_%i", 
    "id", getPackageName()); 
View addButton = findViewById(resID); 

где %i заменен некоторым действительным индексом.

Метод getResources() относится к классу Context, поэтому вы можете использовать его непосредственно с Activity. Если вы не находитесь в действии, используйте контекст для доступа: (myCtxt.getResources()).

+0

@Christian: Спасибо. Отлично. – SK9

+3

Обратите внимание, что это будет значительно медленнее, чем использование идентификатора напрямую. – hackbod

+0

Спасибо, только что я искал. Btw, я исправил ошибку компиляции в этом примере кода. –

4

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

+0

Это может быть хорошим подходом для некоторых особых случаев (когда имя ресурсов изменяется или порядок сложный); в противном случае я думаю, что это не лучший способ сделать это. Несколько раз вы получите огромный массив, который заставит ваш код выглядеть вонючим. – Cristian

+0

@cristian действительно делает ужасный неприятный код. Где я это делал раньше, я запустил его в своем статическом классе. Но ваш подход кажется несколько приятнее;) – jsonfry

+1

imho в обоих направлениях запах. :) – Qberticus

Смежные вопросы