2012-12-01 166 views
1


我想使用一些視圖ID,並且我想要一個循環遍歷所有它們。 這裏就是我的意思是:如何在運行時編譯代碼

for (int i = 0;i<10;i++) { 
    TextView tv = (TextView) findViewById(R.id.txt+i); 
} 

當然是錯誤的,但可以說我有佈局10 TextViews

txt0 

txt1 

txt2 

. 

. 

. 

txt9 

我希望循環執行這樣的事情:

TextView tv = (TextView) findViewById(R.id.txt0); 
TextView tv = (TextView) findViewById(R.id.txt1); 
. 
. 
. 
TextView tv = (TextView) findViewById(R.id.txt+9); 

是否有可能?

謝謝!

回答

4

您可以找到名字的ID是這樣的:

for(int i=0;i<10;i++){ 
    int id = getResources().getIdentifier("txt" + i, "id", context.getPackageName()); 
    TextView tv = findViewById(id); 
    // but what here? 
} 

然而,這只是分配一個TextView 10倍。這之後你在做什麼?我看不出這是如何有用,但也許你可以建立它。

+0

謝謝!這正是我需要的。我試圖設計一個小部件,並且您必須通過它的ID來到每個「TextView」。在此之後,我設置每個「TextView」的文字 –

+0

不客氣。 – Simon

0

相反試試這個

TextView tv = new TextView(context); 

,並設置變量作爲循環索引和標籤

-1

訪問試試這個:

TextView[] tv=new TextView[10]; 
for (int i = 0;i<10;i++) { 
    tv[i] = (TextView) findViewById(R.id.txt+i); 
tv[i].setId(1000+i); 

} 

當你想使用一個TextView。使用電視[1] ...等

+0

不會工作。 R.id.txt + i的操作發生在運行時,因爲需要在編譯時設置正確的引用 – Jatin

+1

你不能只增加id。 id和引用的資源之間沒有關聯。 – Simon

+0

實際上,這*會*可能工作,因爲在編譯時分配的視圖ID常量往往是順序的。但依靠這種做法是不好的做法。 –