2012-11-24 18 views
2

我正在寫一個android應用程序,我試圖用嵌套循環初始化一個按鈕的網格。如何通過使用字符串變量的id查找視圖?

我最初通過研究發現了這個當前的解決方案,但我無法弄清楚什麼是錯誤的。

for (int i = 0; i < piles.length; i++) 
    for (int j = 0; j < piles[0].length; j++) { 

     id = getResources().getIdentifier("R.id." + "b" + numplayaz + Integer.toString(i) + Integer.toString(j), "id","app.dj"); 
     bpiles[i][j] = ((Button) this.findViewById(id)); 
     bpiles[i][j].setOnClickListener(this); 
    } 
} 

由於某些原因,當id始終設置爲0,因此bpiles [0] [0]設置爲null,然後獲取空指針異常。

i'v嘗試了一些小解決方案,但沒有任何工作。

沒有人看到我的問題是什麼或有更好的解決方案。

哦,當我看到這篇文章時,我想到了這一點。 Android findViewbyId with a variant string

+0

你的包名真的是'app.dj',你試過用'getPackageName()'來代替嗎?另外發布你如何設置每個按鈕的ID。 – Sam

回答

3

它看起來像的getIdentifier()第一個參數是錯誤的:

id = getResources().getIdentifier("R.id." + "b" + numplayaz + Integer.toString(i) + Integer.toString(j), "id","app.dj"); 
//    Do not use "R.id." ^^^^^^^ 

我們已知道您正在嘗試引用R,第二個參數指定類型"id"。更改它太:

id = getResources().getIdentifier("b" + numplayaz + Integer.toString(i) + Integer.toString(j), "id", "app.dj"); 

而且字符串的+經營者應優先考慮,這樣你就可以"b" + numplayaz + i + j。但是一個StringBuilder可能是你最快的方法,也更容易閱讀。

0

0表示找不到id。

  1. 您是否檢查過您所引用的所有ID?

  2. 使用getPackageName()而不是「app.dj」。也許它不完整。

0

一旦你建立你繪製的名字,你可以使用這個功能來獲得其編號:

public static int getDrawableByName(String name) { 
    int drawableId = 0; 

    try { 
     Class res = R.drawable.class; 
     Field field = res.getField(name); 
     drawableId = field.getInt(null); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return drawableId; 
} 
+0

可提及的地方在哪裏? – Sam

相關問題