圖片載入錯亂,Glide無法設定Tag解決方式
阿新 • • 發佈:2019-01-04
因為Adapter對View的複用以及圖片網路請求的耗時問題有時候在快速滑動且網路不佳的情況下會出現圖片載入錯亂。
即滑動到螢幕內發出網路請求,但並未請求完成就已滑出螢幕,待到請求完成時,就載入到了其它ItemView上。
常用的做法是將uri設定為ImageView的tag例如:
String title = dataBean.getTitle();
String uri = dataBean.getThumbnail_pic_s();
holder.mImgContentItem.setTag(uri);
if(holder.mImgContentItem .getTag()!=null&&uri==holder.mImgContentItem.getTag(){
holder.mImgContentItem.setImageResource();
holder.mTextContentItem.setText(title);
}
即在載入前將圖片uri傳遞給ImageView,在要展示圖片前,將當前請求的uri和ImageView做對比判斷,是同一個,才進行載入。
但是當我們使用Glide做圖片載入的時候這麼設定會出現You must not call setTag() on a view Glide is targeting 錯誤提示。
此時我們只需要通過setTag(key,object)來進行設定即可:
String title = dataBean.getTitle();
String uri = dataBean.getThumbnail_pic_s();
holder.mImgContentItem.setTag(R.id.imageid,uri);
if(holder.mImgContentItem.getTag(R.id.imageid)!=null&&uri==holder.mImgContentItem.getTag(R.id.imageid)){
Glide.with(mContext).load (uri).into(holder.mImgContentItem);
holder.mTextContentItem.setText(title);
}
注意:setTag內第一個引數key,必須是resource資源,只需在res-value內建立一個ids.xml即可,內部程式碼:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="imageid" type="id"/>
</resources>
然後就可以通過R.id進行引用了