如何获取已加载在ImageView中的图片ID

当需要在点击ImageView后,用其加载的图片作为Notification的图标时,遇到如何获取ImageView内部图片ID的问题。通过查看ImageView的源码,发现图片ID被存储在私有属性mResource中。由于没有直接获取该属性的方法,故采用反射机制,遍历ImageView的字段并获取名为mResource的字段值,从而得到图片ID。
摘要由CSDN通过智能技术生成


动机:程序的某个Activity中有一个ListView,ListView的每行视图中都有ImageView,程序初始化后,通过Adapter向ImageView中加载图片,现在的需求是,点击该图片能够发送notification通知消息,消息的图标为点击的图片,现在问题来了,如何在给NotificationCompat.Builder设置setSmallIcon时填入ImageView中图片的ID?

上网搜索一番后无果,于是想到在给ImageView加载图片时似乎传入了一个图片ID(iv_cheat_icon.setImageResource(user.getHeadImage()); 注:iv_cheat_icon是一个ImageView,       user.getHeadImage()是一个图片的id(R.mipmap.tupian)),于是打开ImageView源码中的setImageResource(int resId)的源码:

public void setImageResource(@DrawableRes int resId) {
    // The resource configuration may have changed, so we should always
    // try to load the resource even if the resId hasn't changed.
    final int oldWidth = mDrawableWidth;
    final int oldHeight = mDrawableHeight;

    updateDrawable(null);
    mResource = resId;
    mUri = null;

    resolveUri();

    if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {
        requestLayout();
    }
    invalidate();
}

原来我们传的id赋给了一个叫做mResource的属性,往上翻了翻,发现这是一个私有属性,于是翻了一遍方法,可惜没有获得该属性的方法,于是便只有用反射来获取了,下面代码中红色部分就是获取该ImageView中图片ID的方法,imgid就是我们的结果。感兴趣的可以试试。

Field[] fields=iv_cheat_icon.getClass().getDeclaredFields();

int imgid=0;

for(Field f:fields){

if(f.getName().equals("mResource")){


f.setAccessible(true);

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值