在android中从name而不是id获取资源

时间:2011-08-16 14:49:44

标签: java android xml android-layout nullpointerexception

我有以下代码来获取使用name而不是id的资源:

spec = new ImageView[56];
for (i=2; i<=56; i++) {
    String s = null;
    s = "items_r"+Integer.toString(i)+"_c1";
    spec[i] = (ImageView) findViewById(getResources().getIdentifier(s,"drawable",getPackageName()));
    Log.e(tag, Boolean.toString(spec[i] == null));
}

我的drawable文件夹中有56个项目名为items_r1_c1到items_r56_c1;
但我得到spec [i]为null。
有人能指出我的错误以及如何纠正错误吗?
谢谢。

2 个答案:

答案 0 :(得分:2)

findViewById(int)用于查找已经膨胀且当前存在于您的活动内容视图下的View

您需要使用Resources.getDrawable(int)ImageView.setImageResource(int)

spec = new ImageView[56];
for (i=2; i<=56; i++) {
    String res = "items_r" + Integer.toString(i) + "_c1";
    int resId = getResources().getIdentifier(res, "drawable", getPackageName());
    spec[i] = new ImageView();
    // Drawable image = getResources.getDrawable(resId);
    // spec[i].setImageDrawable(image);
    spec[i].setImageResource(resId);
    Log.e(tag, Boolean.toString(spec[i] == null));
}

答案 1 :(得分:1)

试试这个

int id = findViewById(getResources().getIdentifier(s,"drawable",getPackageName());
spec[i] = (new ImageView()).setImageResource(id);