2

我正在编写一个 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] 设置为空时,然后得到空指针异常。

我尝试了很多小解决方案,但没有任何效果。

有没有人看到我的问题是什么或者有更好的解决方案。

哦,当我看到这篇文章时,我想出了这个。 带有变体字符串的 Android findViewbyId

4

3 回答 3

3

看起来第一个参数getIdentifier()是错误的:

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

我们已经知道您正在尝试引用R,并且第二个参数指定了 type "id"。也改一下:

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

字符串的+运算符也应该优先,所以你可以"b" + numplayaz + i + j. 但是 StringBuilder 可能是您最快的方法并且更易于阅读。

于 2012-11-24T21:21:58.927 回答
0

0 表示找不到 id。

  1. 您是否检查过您引用的所有 id 是否存在?

  2. 使用 getPackageName() 而不是“app.dj”。也许是不完整的。

于 2012-11-24T19:58:23.373 回答
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;
}
于 2012-11-24T20:01:02.987 回答