0

我有一个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);
}

它也不起作用(显然)。我应该如何处理这个?

4

3 回答 3

0

用你的 id 做一个数组。

int[] ids = {R.id.field1,R.id.field2...}

for (int i=0; i<ids.lenght; i++) {
findViewById(ids[i]).setBackgroundColor(Color.WHITE);
}

或者

ViewGroup viewgroup = findViewById(R.id.parentview);

for(int i = 0; i < viewgroup.getChildCount();i++)
{
View child = viewgroup.getChildAt(i);
}
于 2012-12-27T13:21:38.727 回答
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)。如果您随后制作它们,您可以使用您在问题的示例代码中尝试的方法。我不确定这些ID在R.java重新生成时是否保持不变...如果不是,则此方法不可用!

于 2012-12-27T13:22:22.713 回答
0

您可以通过这种方式访问​​它们,稍微慢一点,但怀疑您会遇到问题:

for (int i=1; i<65; i++) {
  int id = getResources().getIdentifier("field" + i, "id", getPackageName())
  findViewById(id).setBackgroundColor(...);
}

听起来像在 xml 中添加它们(我假设?)需要做很多工作。最好通过代码添加它们,然后将它们保存在数组中。

于 2012-12-27T13:24:52.017 回答