How to check which current image resource is attached to ImageView in android xml?

Reena picture Reena · Apr 29, 2014 · Viewed 48.8k times · Source

I want to check which image resource is attached to ImageView in xml, I am able to check that which image resource is attached to image view but my requirement is to how to check that the ImageView has the same resource which I have set into xml or not, based on that I need to perform some actions.Code always executes else part. Following is my code,

  if (regProfile.getDrawable() == getResources().getDrawable( R.drawable.ivpic)) 
    {
      Toast.makeText(_con, "Image is ivPic", Toast.LENGTH_LONG).show(); 
      // new RegisterAsyntaskNew().execute(); 
    } 
  else 
    {
     Toast.makeText(_con, "Image isn't ivPic", Toast.LENGTH_LONG).show(); 
     // new RegisterAsyntask().execute(); 
    }

Answer

Jitesh Upadhyay picture Jitesh Upadhyay · Apr 29, 2014

Hi please have a try with this as follows

if (regProfile.getDrawable().getConstantState() == getResources().getDrawable( R.drawable.ivpic).getConstantState()) 
{
  Toast.makeText(_con, "Image is ivPic", Toast.LENGTH_LONG).show(); 
  // new RegisterAsyntaskNew().execute(); 
} 
else 
{
 Toast.makeText(_con, "Image isn't ivPic", Toast.LENGTH_LONG).show(); 
 // new RegisterAsyntask().execute(); 
}

please use .getConstantState() to compare

visit

http://developer.android.com/reference/android/graphics/drawable/Drawable.html

http://developer.android.com/reference/android/graphics/drawable/Drawable.ConstantState.html

EDIT:

.getResources().getDrawable(imageResource)

Is deprecated in API21, so I changed Jitesh Upadhyay's answer.

Here is the code:

@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
public static boolean checkImageResource(Context ctx, ImageView imageView,
        int imageResource) {
    boolean result = false;

    if (ctx != null && imageView != null && imageView.getDrawable() != null) {
        ConstantState constantState;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            constantState = ctx.getResources()
                    .getDrawable(imageResource, ctx.getTheme())
                    .getConstantState();
        } else {
            constantState = ctx.getResources().getDrawable(imageResource)
                    .getConstantState();
        }

        if (imageView.getDrawable().getConstantState() == constantState) {
            result = true;
        }
    }

    return result;
}