使用字符串代替ID的引用控件

时间:2011-02-09 18:32:32

标签: android reference controls

引用android控件的典型方法是这样的:

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

其中R.id.tv是引用我的xml控件的整数。

问题是我想使用字符串“R.id.tv”进行引用。这可能吗?

假设我有多个控件:

tv1,
tv2,
tv3,
tv4,
tv5,

我如何将其置于某种循环中并通过控件进行交互。我想我会使用循环计数器来引用不同的控件。怎么样?感谢。

4 个答案:

答案 0 :(得分:3)

一种方法是将id放入数组并通过下标引用。

int[] ids = { R.id.tv1, R.id.tv2 /* etc. */ };
for (int i = 0; i < ids.length; ++i) {
    TextView tv = (TextView)findViewById(ids[i]);
}

答案 1 :(得分:2)

尝试下一步

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)));
      ...
     }

答案 2 :(得分:1)

答案 3 :(得分:1)

我不明白你为什么要这样做,它非常丑陋,低效,并且可能导致维护问题和错误。

为什么不使用集合(例如ArrayList)存储对所有控件的引用?