Android 使用编程字符串设置图像资源可绘制
使用带有基本适配器的数组填充listview。有过多的可选配抽屉,因此开关箱效率极低。我一直在尝试使用getResources().getIdentifier()系统实现一个两行程序,但所有尝试都未能返回0 x 0000的资源id 工作代码Android 使用编程字符串设置图像资源可绘制,android,resources,drawable,identifier,Android,Resources,Drawable,Identifier,使用带有基本适配器的数组填充listview。有过多的可选配抽屉,因此开关箱效率极低。我一直在尝试使用getResources().getIdentifier()系统实现一个两行程序,但所有尝试都未能返回0 x 0000的资源id 工作代码 try { final ImageView star = convertView.findViewById(R.id.star); final JSONObject ob
try {
final ImageView star = convertView.findViewById(R.id.star);
final JSONObject object = list.getJSONObject(i);
switch (object.getString("star")){
case "a":
star.setImageResource(R.drawable.stara);
break;
case "b":
star.setImageResource(R.drawable.starb);
break;
case "c":
star.setImageResource(R.drawable.starc);
break;
case "d":
star.setImageResource(R.drawable.stard);
break;
}
我需要这样的东西,但是getIdentifier()方法
“star”+object.getString(“star”)+“.png”是资源文件夹(stara.png、starb.png等)中可绘制的确切名称
我一直使用getIdentifier()方法获取此异常
如何正确地实现这一点或更好地使用编程字符串来确定设置为imageview的资源可绘制名称?您应该省略“.png”。如果您正在寻找“stara.png”,那么您试图获得的是idenfifier
R.drawable.stara
,因此您应该拥有
getActivity().getResources().getIdentifier("star" + object.getString("star"), "drawable", getActivity().getPackageName())));
删除
+“.png”
。您没有指定资源的扩展名。谢谢!将在9分钟内接受答案。有更有效的方法吗?如果您真的需要从JSONObject
中的值(如“a”)映射到可绘制的值,那么除了使用开关和getIdentifier
之外,我想不出任何其他选项。然而,我可以建议的是,不要直接处理JSONObject
。使用列表
创建一个列表
,这应该是适配器所使用的。对于每个模型对象,您只需要执行一次从字符串到可绘制ID的转换(在构造函数中),然后您就可以使用类似于public int getDrawableId()
的内容返回ID。这最终会更有效率。您也可以简单地使用静态映射从JSONObject提供的键解析可绘制的整数。
No package identifier when getting value for resource number 0x00000000
getActivity().getResources().getIdentifier("star" + object.getString("star"), "drawable", getActivity().getPackageName())));