Управление ссылками с использованием строки вместо идентификатора - PullRequest
3 голосов
/ 09 февраля 2011

Типичный способ ссылаться на управление Android - что-то вроде этого:

TextView tv = (TextView)findViewById(R.id.tv);

Где R.id.tv - целое число, ссылающееся на мой элемент управления xml.

Дело в том, что я хотел бы сделать ссылку, используя строку "R.id.tv". Это возможно?

Допустим, у меня есть несколько элементов управления:

tv1,
tv2,
tv3,
tv4,
tv5,

Как бы я поместил это в какой-то цикл и использовал элементы управления? Я думаю, что я бы использовал счетчик цикла для ссылки на различные элементы управления. Как это сделать? Спасибо.

Ответы [ 4 ]

3 голосов
/ 09 февраля 2011

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

int[] ids = { R.id.tv1, R.id.tv2 /* etc. */ };
for (int i = 0; i < ids.length; ++i) {
    TextView tv = (TextView)findViewById(ids[i]);
}
2 голосов
/ 19 апреля 2012

Попробуйте следующий

private int getIdResourceByName(String aString)
{
  String packageName = "com.myProject.myPackage"; // set your package name here
  int resId = getResources().getIdentifier(aString, "id", packageName);
  return resId;
}

...

  for (int i = 1; i<=5; i++) {
      TextView tv = (TextView) findViewById(getIdResourceByName("tv" + Integer.toString(i)));
      ...
     }
1 голос
/ 09 февраля 2011

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

Почему бы не использовать коллекцию (например, ArrayList) для хранения ссылокна все органы управления?

1 голос
/ 09 февраля 2011
...