使用编程字符串设置可绘制的图像资源

set image resource drawable with a programmatic String

使用带有基本适配器的数组来填充列表视图。有很多可选的可绘制对象,因此 switch case 的效率非常低。我一直在尝试使用 getResources().getIdentifier() 系统实现两个衬里,但所有尝试都失败了,返回的资源 ID 为 0 x 0000。

工作代码

            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() 方法

final ImageView star = convertView.findViewById(R.id.star);
star.setImageDrawable(getActivity().getResources().getDrawable(getActivity().getResources().getIdentifier("star" + object.getString("star") + ".png", "drawable", getActivity().getPackageName())));

"star" + object.getString("star") + ".png" 是资源文件夹中的确切绘图名称 (stara.png, starb.png, . ...)

我一直在使用 getIdentifier() 方法时收到此异常

No package identifier when getting value for resource number 0x00000000

如何使用编程字符串正确实施此方法或更好的方法来确定设置为图像视图的资源可绘制名称?

您应该省略“.png”。如果你正在寻找"stara.png",你试图得到的是标识符R.drawable.stara,那么你应该有的是

getActivity().getResources().getIdentifier("star" + object.getString("star"), "drawable", getActivity().getPackageName())));