图片加载错乱,Glide无法设置Tag解决方式

举报
程思扬 发表于 2022/01/13 23:13:03 2022/01/13
【摘要】 因为Adapter对View的复用以及图片网络请求的耗时问题有时候在快速滑动且网络不佳的情况下会出现图片加载错乱。 即滑动到屏幕内发出网络请求,但并未请求完成就已滑出屏幕,待到请求完成时,就加载到了其它ItemView上。 常用的做法是将uri设置为ImageView的tag例如: String title = ...

因为Adapter对View的复用以及图片网络请求的耗时问题有时候在快速滑动且网络不佳的情况下会出现图片加载错乱。
即滑动到屏幕内发出网络请求,但并未请求完成就已滑出屏幕,待到请求完成时,就加载到了其它ItemView上。
常用的做法是将uri设置为ImageView的tag例如:


   
  1. String title = dataBean.getTitle();
  2. String uri = dataBean.getThumbnail_pic_s();
  3. holder.mImgContentItem.setTag(uri);
  4. if(holder.mImgContentItem.getTag()!=null&&uri==holder.mImgContentItem.getTag(){
  5. holder.mImgContentItem.setImageResource();
  6. holder.mTextContentItem.setText(title);
  7. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

即在加载前将图片uri传递给ImageView,在要展示图片前,将当前请求的uri和ImageView做对比判断,是同一个,才进行加载。

但是当我们使用Glide做图片加载的时候这么设置会出现You must not call setTag() on a view Glide is targeting 错误提示。
此时我们只需要通过setTag(key,object)来进行设置即可:


   
  1. String title = dataBean.getTitle();
  2. String uri = dataBean.getThumbnail_pic_s();
  3. holder.mImgContentItem.setTag(R.id.imageid,uri);
  4. if(holder.mImgContentItem.getTag(R.id.imageid)!=null&&uri==holder.mImgContentItem.getTag(R.id.imageid)){
  5. Glide.with(mContext).load(uri).into(holder.mImgContentItem);
  6. holder.mTextContentItem.setText(title);
  7. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注意:setTag内第一个参数key,必须是resource资源,只需在res-value内建立一个ids.xml即可,内部代码:


   
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <item name="imageid" type="id"/>
  4. </resources>
  • 1
  • 2
  • 3
  • 4

然后就可以通过R.id进行引用了

文章来源: chengsy.blog.csdn.net,作者:程思扬,版权归原作者所有,如需转载,请联系作者。

原文链接:chengsy.blog.csdn.net/article/details/79940900

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。