2012-12-27 33 views
0

检索LinearLayouts我有一个8×8 64四个字段,每个都是的LinearLayout使用他们的ID

每个LinearLayout都有它的ID(field1,field2 ... field64)。 现在我想稍后在我的程序中修改每个字段的背景,但我不知道如何检索我想要修改的布局。我想把它们全部放在Array中,但它不起作用。

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

你真的需要通过id引用它们吗?你可以从他们的共同父母那里得到他们的全部。我认为这比处理一套ID更好。 –

回答

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

或以其它任何方法来创建这样一个列表/阵列。它有点乏味,添加这样的所有字段,但它提供了一个可用于循环的可用列表。

也可以(I 认为)重新编号字段的ID(在R.java中)。如果您随后创建它们,则可以使用您在问题示例代码中尝试的方法。当重新生成R.java时,我不确定这些ID是否保持不变。如果不是,则此方法不可用!

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

您可以访问他们这样,一点点慢,但怀疑你将有它的问题:

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

听起来像很多工作在XML中添加这些(我假设?)一样,虽然。最好你可以通过代码添加它们,然后将它们保存在一个数组中。

相关问题