我正在编写一个Android应用程序,我正在尝试使用嵌套循环初始化按钮网格。
我最初通过研究找到了这个当前的解决方案,但我无法弄清楚什么是错误的。
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,然后获得空指针异常。
我尝试了很多小解决方案,但没有任何效果。
有没有人看到我的问题是什么,或者有更好的解决方案。
哦,当我看到这篇文章时,我想出了这个。 Android findViewbyId with a variant string答案 0 :(得分: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");
此外,String的+
运算符应优先,因此您可以"b" + numplayaz + i + j
。但是StringBuilder可能是您最快的方法,也更容易阅读。
答案 1 :(得分:0)
0表示找不到id。
您是否检查过您所引用的所有ID?
使用getPackageName()而不是“app.dj”。也许它不完整。
答案 2 :(得分:0)
构建可绘制名称后,可以使用此函数获取其Id:
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;
}