我有 8x8主板, 64个四个字段,每个 LinearLayout 。
每个 LinearLayout 的ID都像(field1,field2 ... field64)。 现在我想在程序中稍后修改每个字段的背景但我不知道如何检索我想要修改的布局。我想将所有这些都放在数组中,但它不起作用。
private LinearLayout[] fields = new LinearLayout[65];
this.fields[field_id].setBackgroundColor(colour);
另一种方法:
for (int i=1; i<65; i++) {
findViewById(R.id.field+i).setBackgroundColor(Color.WHITE);
}
它不起作用(显然)。我该怎么做呢?
答案 0 :(得分:0)
使用您的ID创建一个数组。
int[] ids = {R.id.field1,R.id.field2...}
for (int i=0; i<ids.lenght; i++) {
findViewById(ids[i]).setBackgroundColor(Color.WHITE);
}
OR
ViewGroup viewgroup = findViewById(R.id.parentview);
for(int i = 0; i < viewgroup.getChildCount();i++)
{
View child = viewgroup.getChildAt(i);
}
答案 1 :(得分:0)
您可以将它们添加到列表中,如下所示:
List fieldList = new ArrayList(64);
fieldList.add(R.id.field1);
fieldList.add(R.id.field2);
fieldList.add(R.id.field3);
// etc.
fieldList.add(R.id.field64);
或者使用任何其他方法来创建这样的列表/数组。这有点单调乏味,添加了这样的所有字段,但它提供了一个可用于循环的可用列表。
也可以(我想)重新编号字段的ID(在R.java
中)。如果您随后进行后续操作,则可以使用您在问题的示例代码中尝试的方法。我不确定在重新生成R.java
时这些ID是否保持不变...如果不是,则此方法不可用!
答案 2 :(得分:0)
您可以通过这种方式访问它们,速度稍微慢一点,但怀疑您会遇到问题:
for (int i=1; i<65; i++) {
int id = getResources().getIdentifier("field" + i, "id", getPackageName())
findViewById(id).setBackgroundColor(...);
}
听起来很多工作在xml中添加它们(我假设?)就像这样。您最好通过代码添加它们,然后将它们保存在数组中。