意见我有一个布局包含4个TextViews与IDS:“名1”,“名称2”,“NAME3”,“NAME4”的Android迭代通过标识
我想对他们重复使用一个for循环, 有没有办法做到这一点?
像
for(int i = 1; i <= 4; i++)
{
findViewById(R.id."Name" + i)
}
我知道这个代码远不是真实的,但任何帮助吗? 谢谢! Ron
意见我有一个布局包含4个TextViews与IDS:“名1”,“名称2”,“NAME3”,“NAME4”的Android迭代通过标识
我想对他们重复使用一个for循环, 有没有办法做到这一点?
像
for(int i = 1; i <= 4; i++)
{
findViewById(R.id."Name" + i)
}
我知道这个代码远不是真实的,但任何帮助吗? 谢谢! Ron
不,你不能这样做,因为R.id.xyz引用静态类的静态int。这不是一个可以像这样连接的字符串。此外,你的代码忽略了findViewById的返回值,所以它什么都不做(尽管我意识到你提到的代码是真实的,但仍然是一个实际的用例可能有助于澄清你要做的事情)。 R.id.“Name”意味着什么,并会给你一个编译器错误。
要遍历,你可以做这样的事情:
int[] ids = {R.id.foo, R.id.bar};
然后
for(int i = 0; i<ids.length; i++) {
View v = findViewById(ids[i]);
}
当然,你可以做到这一点的那种。您不能使用字符串文字访问R.id的成员,您必须输入变量名称。 R.id."Test"
不好,但R.id.Test
是好的。
如果您检查R.id.XYZ
的类型,您会发现它只是一个整数。没有理由不能对id
值进行基本算术运算。
然而,这样做并没有意义。编译APK时,编译器会自动创建一个名为R
的静态类,其中包含对APK中包含的各种资源和资源的引用,例如布局,绘图,声音等。
仅仅因为您知道整数R.id.button1的值是X,并不能保证R.id.button2的整数值是X + 1,实际上它可以是任何东西。
如果要创建要迭代的列表TextViews
,请考虑将它们添加到列表中,然后迭代列表。像这样:
ArrayList<TextView> list = new ArrayList<TextView>();
list.add((TextView) findViewById(R.id.textView1));
list.add((TextView) findViewById(R.id.textView2));
list.add((TextView) findViewById(R.id.textView3));
list.add((TextView) findViewById(R.id.textView4));
int size = list.getSize();
for (int i=0; i< size; i++)
{
TextView tv = list.get(i);
// Do something with tv like set its label to i
tv.setText(Integer.toString(i));
}
谢谢,这种方法满足我的需求:-) –