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

Posted

技术标签:

【中文标题】在android中从名称而不是id获取资源【英文标题】:Getting resource from name instead of id in android 【发布时间】:2011-10-28 03:40:14 【问题描述】:

我有以下代码用于使用名称而不是 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));

我的可绘制文件夹中有 56 个项目,名为 items_r1_c1 到 items_r56_c1; 但我将 spec[i] 设为空。 有人可以指出我的错误以及如何纠正它吗? 谢谢。

【问题讨论】:

【参考方案1】:

试试这个

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

【讨论】:

【参考方案2】:

findViewById(int) 用于查找已膨胀且当前存在于您的 Activity 内容视图下的 Views。

您需要使用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));

【讨论】:

以上是关于在android中从名称而不是id获取资源的主要内容,如果未能解决你的问题,请参考以下文章