RecyclerView和glide搭配中的圖片混亂

這個bug可以說是折磨了我很久了庆揪,問了人境析,查了博客,最后找到了答案咆槽。

首先要搞明白RecyclerView中的ViewHolder的復用機制是什么陈轿,在,以及由于復用機制和請求網(wǎng)絡(luò)mix在一起之后會發(fā)生哪些可能的事故罗晕,強烈推薦一個好文:

RecyclerView中ViewHolder重用機制理解(解決圖片錯亂和閃爍問題)


他的博客取來的圖片

總結(jié)一下就是:

  • RecyclerView用的是我們自定義的內(nèi)部類ViewHolder來復用的济欢,也就是復用的是ViewHoler
  • 當屏幕下滑,item1滑出可視區(qū)域小渊,將item1的ViewHolder對象給item8復用法褥,那么此時item1中ViewHolder對象中持有的變量都是item1的。
  • item1中的ViewHolder對象酬屉,在onBindViewHolder(MyViewHolder holder, int position)方法中對holder進行更新半等,但是如果在這里調(diào)用glide去從url加載圖片到holder中的imageView對象的話揍愁,就有可能因為網(wǎng)絡(luò)延遲,導致圖片加載不出來杀饵,那么item8就會先顯示item1的圖片莽囤,過一會延遲之后,顯示正確的item8該顯示的圖片

上面博客加載圖片用的是AsynTask切距,我用的是Glide框架朽缎,ViewHolder中3個TextView,一個ImageView,按照那個思路,我的處理方法如下:

@Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        if (holder == null) {
            return;
        }
        holder.tvDesc.setText(resultsBeanList.get(position).getDesc());
        holder.tvPublishedAt.setText(timeParse.getTime(resultsBeanList.get(position).getPublishedAt()));
        Object who = resultsBeanList.get(position).getWho();
        if (who != null) {
            holder.tvWho.setText((String) who);
        }else {
            //防止ViewHolder復用導致上一個tvWho的內(nèi)容遺留
            holder.tvWho.setText("");
        }

        //處理imageView--------------
        List<String> imagesUrl = resultsBeanList.get(position).getImages();

        if (imagesUrl == null) {
            //當ViewHolder復用的時候谜悟,如果當前返回的圖片url為null话肖,為了防止上一個復用的viewHolder圖片
            //遺留,要clear并且將圖片設(shè)置為空葡幸。
            Glide.with(fragment).clear(holder.ivImage);
            holder.ivImage.setImageDrawable(null);
            holder.ivImage.setTag(R.id.image_tag, position);
            return;
        }
        Object tag=holder.ivImage.getTag(R.id.image_tag);
        if (tag!=null&&(int) tag!= position) {
            //如果tag不是Null,并且同時tag不等于當前的position最筒。
            //說明當前的viewHolder是復用來的
            //Cancel any pending loads Glide may have for the view
            //and free any resources that may have been loaded for the view.
            Glide.with(fragment).clear(holder.ivImage);
        }
        String url = imagesUrl.get(0);
        Glide.with(fragment)
                .load(url + "?imageView2/0/w/100")
                .apply(options)
                .into(holder.ivImage);
        //給ImageView設(shè)置唯一標記。
        holder.ivImage.setTag(R.id.image_tag, position);
    }

至此蔚叨,不再圖片混亂床蜘。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蔑水,隨后出現(xiàn)的幾起案子邢锯,更是在濱河造成了極大的恐慌,老刑警劉巖搀别,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弹囚,死亡現(xiàn)場離奇詭異,居然都是意外死亡领曼,警方通過查閱死者的電腦和手機鸥鹉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庶骄,“玉大人毁渗,你說我怎么就攤上這事〉サ螅” “怎么了灸异?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長羔飞。 經(jīng)常有香客問我肺樟,道長,這世上最難降的妖魔是什么逻淌? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任么伯,我火速辦了婚禮,結(jié)果婚禮上卡儒,老公的妹妹穿的比我還像新娘田柔。我一直安慰自己俐巴,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布硬爆。 她就那樣靜靜地躺著欣舵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缀磕。 梳的紋絲不亂的頭發(fā)上缘圈,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音袜蚕,去河邊找鬼准验。 笑死,一個胖子當著我的面吹牛廷没,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播垂寥,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼颠黎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了滞项?” 一聲冷哼從身側(cè)響起狭归,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎文判,沒想到半個月后过椎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡戏仓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年疚宇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赏殃。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡敷待,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仁热,到底是詐尸還是另有隱情榜揖,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布抗蠢,位于F島的核電站举哟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏迅矛。R本人自食惡果不足惜妨猩,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秽褒。 院中可真熱鬧册赛,春花似錦钠导、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扼睬,卻和暖如春逮栅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窗宇。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工措伐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人军俊。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓侥加,卻偏偏與公主長得像,于是被迫代替她去往敵國和親粪躬。 傳聞我的和親對象是個殘疾皇子担败,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評論 25 707
  • 【Android 控件 RecyclerView】 概述 RecyclerView是什么 從Android 5.0...
    Rtia閱讀 307,514評論 27 439
  • 一、簡介 在泰國舉行的谷歌開發(fā)者論壇上镰官,谷歌為我們介紹了一個名叫Glide的圖片加載庫提前,作者是bumptech。這...
    天天大保建閱讀 7,474評論 2 28
  • 晚上回到宿舍泳唠,絕望的發(fā)現(xiàn)狈网,又,停水了......本來打算只洗個澡笨腥,衣服等明天拓哺。結(jié)果,很多時候真的是在你絕望的時...
    小阿信閱讀 176評論 0 0
  • 今天早上一看窗外下雪了脖母,我趕忙叫起女兒拓售,女兒一聽下雪了神速的穿好了衣服高興的不得了。我們早早地吃完早飯女兒就要趕緊...
    宋玉新閱讀 174評論 0 0