2012-12-27 67 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中添加這些(我假設?)一樣,雖然。最好你可以通過代碼添加它們,然後將它們保存在一個數組中。

相關問題