2011-11-20 210 views
3

我有這樣的代碼:初始化變量在for循環

TextView wyniszczenie_zakres_bmi = (TextView)t.findViewById(R.id.wyniszczenie_zakres_bmi); 
TextView wychudzenie_zakres_bmi = (TextView)t.findViewById(R.id.wychudzenie_zakres_bmi); 
TextView niedowaga_zakres_bmi = (TextView)t.findViewById(R.id.niedowaga_zakres_bmi); 

我可以做這樣的事情?

List<String> arStan = new ArrayList<String>(); 
arStan.add("wyniszczenie"); 
arStan.add("wychudzenie"); 
arStan.add("niedowaga"); 

for(String s : arStan){ 
    TextView s + _zakres_bmi = (TextView)t.findViewById(R.id. + s + _zakres_bmi); 
} 

我知道這是行不通的,但有沒有解決方案?如果你需要保存以供日後而TextView的引用不是對他們採取行動,立即,然後把myTextView到一個數組或哈希表它分配後

List<String> arStan = new ArrayList<String>(); 
arStan.add("wyniszczenie"); 
arStan.add("wychudzenie"); 
arStan.add("niedowaga"); 

for(String s : arStan) { 
    int myId = getResources().getIdentifier(s + "_zakres.bmi", "id", getPackageName()); 
    TextView myTextView = (TextView)t.findViewById(myId); 
    // Do something with myTextView 
} 

+1

不使用反射。 –

+0

我同意@Matt。作爲替代,您可以使用數組或ListView的TextViews。或者是一個Map,其中枚舉是鍵和關聯的TextView的值。 –

回答

3

試試這個。

Hashtable textViews = new Hashtable<String, TextView>(); 
List<String> arStan = new ArrayList<String>(); 
arStan.add("wyniszczenie"); 
arStan.add("wychudzenie"); 
arStan.add("niedowaga"); 

for(String s : arStan) { 
    int myId = getResources().getIdentifier(s + "_zakres.bmi", "id", getPackageName()); 
    TextView myTextView = (TextView)t.findViewById(myId); 
    textViews.put(s + "_zakres.bmi", myTextView); 
} 

// When you need to get one of the TextViews: 
TextView tv = textViews.get("niedowaga_zakres.bmi"); 
// Do something with tv. 
+0

它的工作原理!謝謝! :) –

+0

太棒了!如果有幫助請接受答案。 – goto10