尽可能避免这种情况。如果你真的需要这样做,请退一步重新思考,因为这是一项昂贵的操作,并且可能有更好的方法。
答案 0 :(得分:2)
您可以使用该方法将字符串转换为int identifier:
public static int getStringIdentifier(Context context, String name) {
return context.getResources().getIdentifier(name, "drawable", context.getPackageName());
}
将活动作为上下文参数(或任何其他Context实例)传递。然后你可以像往常一样使用getString()方法。
请注意,从字符串到标识符的转换使用反射,因此可能不那么快,因此请谨慎使用。
请参阅:This SO post
使用示例:number1.setImageResource(getStringIdentifier(this,String.valueOf(n+rnd)));
答案 1 :(得分:1)
方法setImageResource
期望生成并存储在R文件中的整数,因此将String附加到方法不起作用。
幸运的是,Android确实提供了一种名为getIdentifier
的方法 getResources().getIdentifier("n1", "drawable", this.getPackageName());
这个方法很慢,所以如果你多次调用它,最好在开头将所有资源作为位图加载,然后将ImageView资源设置为当时需要的任何位图
Bitmap[] numbers = new Bitmap[9]
for(int i=1; i<=9; i++) {
numbers[i] = BitmapFactory.decodeResource(getResources(), getResources().getIdentifier(("n"+i), "drawable", this.getPackageName()););
}
然后你可以制作一个方法来调用
private void setNumber(int i) {
image.setImageBitmap(numbers[i]);
}
答案 2 :(得分:1)
如果你只使用那9个drawable,只需创建一个数组来保存那些drawable的资源ID值。
static final int[] RESOURCE_IDS = {
0, // empty value so that i = 1 corresponds to R.drawable.n1
R.drawable.n1,
...
R.drawable.n9
};
Random rand = new Random();
int resourceId = RESOURCE_IDS[rand.nextInt(9)+1]; // random integer from 1-9
mImageView.setImageResource(resourceId);