android通过Id迭代视图

时间:2011-11-22 17:05:37

标签: android view for-loop loops

我有一个包含4个带有ID的TextView的布局:“Name1”,“Name2”,“Name3”,“Name4”

我想用for循环迭代它们, 有没有办法做到这一点?

类似

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

我知道这段代码远非真实,但有任何帮助吗? 谢谢! 罗恩

2 个答案:

答案 0 :(得分:5)

不,你不能这样做,因为R.id.xyz引用静态类的静态int。它不是可以像这样连接的字符串。此外,您的代码忽略了findViewById的返回值,因此它什么都不做(尽管我意识到您提到代码远非真实,但实际的用例可能有助于澄清您正在尝试做的事情)。 R.id&#34;名称&#34;没有任何意义,并会给你一个编译错误。

要循环播放,您可以执行以下操作:

int[] ids = {R.id.foo, R.id.bar};

然后

for(int i = 0; i<ids.length; i++) {
View v = findViewById(ids[i]);
}

答案 1 :(得分: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列表,请考虑将它们添加到List中,然后迭代列表。像这样:

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