2011-11-22 61 views
0

意见我有一个布局包含4个TextViews与IDS:“名1”,“名称2”,“NAME3”,“NAME4”的Android迭代通过标识

我想对他们重复使用一个for循环, 有没有办法做到这一点?

for(int i = 1; i <= 4; i++) 
    { 
     findViewById(R.id."Name" + i) 
    } 

我知道这个代码远不是真实的,但任何帮助吗? 谢谢! Ron

回答

5

不,你不能这样做,因为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]); 
} 
+0

谢谢,这种方法满足我的需求:-) –

0

当然,你可以做到这一点的那种。您不能使用字符串文字访问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)); 
}