我正在制作Android应用。我有一个ImageView
,在我的代码的某些部分,我需要更改其资源。我有一个
String[] names = {"chair","desk"};
我的drawable文件夹中有2个图像,其名称为“chair”和“desk”。当我使用
image.setImageResource(R.drawable.chair);
它完美无缺。但我需要将其用作:
image.setImageResource(R.drawable.names[0]);
但Java不允许我这样做。我需要将string的值发送给该方法。有没有办法做到这一点?
答案 0 :(得分:6)
我会像
一样改变它int[] names = {R.drawable.chair,R.drawable.desk};
然后你可以直接使用
image.setImageResource(names[0]);
如果您想使用String
,可以使用getResources().getIdentifier()
来检索具有该名称的drawable ID
答案 1 :(得分:2)
像这样使用
String[] names = {"drawable/chair","drawable/desk"};
int imageResource = getResources().getIdentifier(names[0], null, getActivity().getPackageName());
image.setImageResource(imageResource);
非常简单。
答案 2 :(得分:0)
使用R.drawable.xx可确保从正确的文件夹(本身可绘制/或可绘制-hdpi或drawable-mdpi)中拾取正确的图像,具体取决于设备的屏幕分辨率。因此,使用R.drawable.xx是推荐的方法,如反对" getResources()。getIdentifier(FixedPatch)"
由于R.drawable.xx是一个动态生成的对象,因此使用switch case并根据传入的case引用正确的drawable对象将是最好的。此外,具有默认情况可确保如果在drawable文件夹中找不到图像,仍会呈现ImageView而不会出现任何问题。
如,
Switch (Case)
Case "myString" : ImageView.setImageResource(R.id.myString);//here R.id.myString is hardcoded object reference
Case "myString2" : ImageView.setImageResource(R.id.myString);
default : ImageView.setImageResource(R.id.myDefaultImage);