Matt
Matt

Reputation: 2680

How to set an imageView's image from a string?

I have a list of entries and some bitmap files in the res/drawable-mdpi directory. I'm trying to load the image corresponding to the string value selected from the list by generating a path string and using bitmap factory. The problem is I don't think my path is right because the bitmap is always null, even for the default image.

String name = entries.get(position);
            String img = "res/drawable/logo_" + name.toLowerCase() + ".png"; // create the file name
            icon.setScaleType(ImageView.ScaleType.CENTER_CROP);

            // check to see if the file exists
            File file = new File(img);
            if (file.exists()){

                bm = BitmapFactory.decodeFile(img);
            }
            else{// use the default icon
                bm = BitmapFactory.decodeFile("logo_default.png");
            }

            // set the image and text
            icon.setImageBitmap(bm);

Does the res directory even get copied onto the device? What is the correct path I should be using, or should I be going about this differently?

Thanks

Upvotes: 36

Views: 60054

Answers (4)

Jibran
Jibran

Reputation: 211

No need to use getDrawable() you directly use the resource id like

Resources res = getResources();
String mDrawableName = "myimageName";
int resID = res.getIdentifier(mDrawableName , "drawable", getPackageName());
imgView.setImageResource(resID);`

Upvotes: 21

mohamed elshazly
mohamed elshazly

Reputation: 61

ImageView img = (ImageView) findViewById(R.id.{ImageView id});
img.setImageResource(getResources().getIdentifier("ImageName","drawable",getPackageName()));

Upvotes: 1

Vishal Bhadani
Vishal Bhadani

Reputation: 131

You can Create Common Function for getting image drawable like this:

public static Drawable getDrawable(Context mContext, String name) {
        int resourceId = mContext.getResources().getIdentifier(name, "drawable", mContext.getPackageName());
        return mContext.getResources().getDrawable(resourceId);
    }

Upvotes: 0

longhairedsi
longhairedsi

Reputation: 3136

if you have the image in the drawable folder you are going about this the wrong way.

try something like this

Resources res = getResources();
String mDrawableName = "logo_default";
int resID = res.getIdentifier(mDrawableName , "drawable", getPackageName());
Drawable drawable = res.getDrawable(resID );
icon.setImageDrawable(drawable );

Upvotes: 54

Related Questions