Android使用glide加载网络图片

<p style="margin-top: 0px; margin-bottom: 1.1em; box-sizing: border-box; color: rgb(54, 46, 43); font-family: "microsoft yahei"; font-size: 14px;">今天在写一个图片加载类ImageLoader,在使用的时候想用Glide替代我写的ImageLoader,然后问题就出来了!!!</p><h2 id="第一个问题在使用自己写的imageloader的时候为了防止item复用导致的图片错乱设置了tag-如下代码" style="margin: 0.8em 0px; padding: 0px; box-sizing: border-box; font-weight: 100; color: rgb(54, 46, 43); font-family: "microsoft yahei";"><a target=_blank name="t0" class=" " style="background-image: url("img/anchor.gif"); color: rgb(106, 57, 6); box-sizing: border-box;"></a><span style="box-sizing: border-box;">第一个问题:在使用自己写的ImageLoader的时候,为了防止item复用导致的图片错乱,设置了Tag 如下代码</span></h2>
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.image_list_item,parent, false);
                holder = new ViewHolder();
                holder.imageView = (ImageView) convertView.findViewById(R.id.image);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            ImageView imageView = holder.imageView;
            final String tag = (String)imageView.getTag();
            final String uri = getItem(position);
            if (!uri.equals(tag)) {
                imageView.setImageDrawable(mDefaultBitmapDrawable);
            }
            if (mIsGridViewIdle && mCanGetBitmapFromNetWork) {
                imageView.setTag(uri);
                mImageLoader.bindBitmap(uri, imageView, mImageWidth, mImageWidth);
            }
            return convertView;
        }

使用setTag(object),这里使用了每个图片的url地址来作为Tag来防止图片错乱 
当使用Glide来替换ImageLoader,代码如下:

          public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.item_gridview, parent, false);
                holder = new ViewHolder();
                holder.imageView = (ImageView) convertView.findViewById(R.id.image);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            ImageView imageView = holder.imageView;
            final String tag = (String) imageView.getTag();
            final String uri = getItem(position);
            if (!uri.equals(tag)) {
                imageView.setImageDrawable(mDefaultBitmapDrawable);
            }

            if (mIsGridViewIdle && mCanGetBitmapFromNetWork) {
                imageView.setTag(uri);
                Glide.with(getApplicationContext()).load(uri).placeholder(R.drawable.image_default).crossFade().into(imageView);
                //mImageLoader.bindBitmap(uri, imageView, mImageWidth, mImageWidth);
            }
            return convertView;
        }

运行结果报错: Java .lang.IllegalArgumentException: You must not call setTag() on a view Glide is targeting 
然后将imageView设置Tag的代码删除,程序正常运行 。 
但这个时候哟与出现一个问题,那就是图片错乱了。

第二个问题:删除ImageView的Tag的时候 图片错乱

解决问题的方法:使用setTag(int,object)方法设置tag 这样就解决了上面两个问题
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.item_gridview, parent, false);
                holder = new ViewHolder();
                holder.imageView = (ImageView) convertView.findViewById(R.id.image);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            ImageView imageView = holder.imageView;
            final String tag = (String) imageView.getTag(R.id.imageloader_uri);
            final String uri = getItem(position);
            if (!uri.equals(tag)) {
                imageView.setImageDrawable(mDefaultBitmapDrawable);
            }

            if (mIsGridViewIdle && mCanGetBitmapFromNetWork) {
                imageView.setTag(R.id.imageloader_uri,uri);
                Glide.with(getApplicationContext()).load(uri).placeholder(R.drawable.image_default).crossFade().into(imageView);
                //mImageLoader.bindBitmap(uri, imageView, mImageWidth, mImageWidth);
            }
            return convertView;
        }

这里的R.id.imageloader_uri是values下新建的ids.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <item name="imageloader_uri" type="id"/>

</resources>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值