如何从String获取资源ID

时间:2013-07-24 00:51:30

标签: java android sqlite imageview

我有一个包含图像名称列表的数据库列。我想使用setImageResource放入imageview。在我的其他应用程序中,我设法做到了这一点,但在这个应用程序中,imageview根本没有显示任何内容。

String Image1 = db.getImage1Now(RandomIndex);
imageViewDoThis1.setImageResource(getResources().getIdentifier( Image1, "drawable", getPackageName()));

如果我这样做:

imageViewDoThis1.setImageResource(R.drawable.image1);

然后它正在工作..帮助!

2 个答案:

答案 0 :(得分:0)

使用此:

imageViewDoThis1.setImageResource(getResources().getIdentifier( "image1", "drawable", getPackageName()));

我认为getIdentifier应该将字符串作为第一个参数。

答案 1 :(得分:0)

所以我遇到了与此非常相似的问题。

我的资源中有一堆图像,我希望能够存储属于数据库中每个项目的图像。我最终使用数据库中项目的id作为图像的唯一标识符。 ids对应于我的DbIcons类中的常量。当我构造我需要的任何对象时,我从该助手类中检索了资源Id。

当我想要检索正确的图像时,我会从数据库中获取id,然后调用静态方法getIcon(categoryId)。这返回了R.id值,并将其传递给ImageView。

这是我的代码剪辑。为了缩短它,我删除了大部分变量和切换语句:


    public Category(int id)
    {
        this.id = id;
        this.name = "";
        this.icon = null;
        this.iconResourceId = DbIcons.getIcon(id);
        this.plateIconResourceId = DbIcons.getPlateIcon(id);
    }


    public class DbIcons 
    {
        /* Category Ids */
        private final static int CAT_BABY = 1;
        private final static int CAT_BAKED_GOODS = 2;
        private final static int CAT_BAKING = 3;

        /* Plate Ids */
        private final static int PLATE_BABY = 1;
        private final static int PLATE_BAKED_GOODS = 2;
        private final static int PLATE_BAKING = 3;

        public static int getIcon(int cat)
        {
            switch (cat)
            {
                case CAT_BABY:
                    return R.drawable.baby;
                case CAT_BAKED_GOODS:
                    return R.drawable.bakedgoods;
                case CAT_BAKING:
                    return R.drawable.baking;
            }

            return R.drawable.default;
        }

        public static int getPlateIcon(int plateIcon)
        {
            switch (plateIcon)
            {
                case PLATE_BABY:
                    return R.drawable.baby_plate;
                case PLATE_BAKED_GOODS:
                    return R.drawable.bakedgoods_plate;
                case PLATE_BAKING:
                    return R.drawable.baking_plate;
            }

            return R.drawable.default;
        }
    }

我希望这是有道理和有帮助的。如果你想让我澄清更多,请问。