使用编程字符串设置图像资源drawable

时间:2017-06-27 19:48:17

标签: android resources drawable identifier

使用带有基本适配器的数组来填充列表视图。有许多可选的抽屉,因此开关盒的效率非常低。我一直在尝试使用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())));

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

我一直使用getIdentifier()方法获取此异常

No package identifier when getting value for resource number 0x00000000

如何使用程序化字符串正确实现此方法或更好的方法来确定要设置为imageview的资源可绘制名称?

1 个答案:

答案 0 :(得分:0)

你应该省略“.png”。如果您正在寻找“stara.png”,那么您想要获得的是识别符R.drawable.stara,那么您应该拥有的是

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