Android中一個(gè)ListView中圖片加載的問(wèn)題

大概如下圖所示的一種需求:整體是一個(gè)列表,列表最末尾有一項(xiàng)和其他item略有區(qū)別的item。


image.png

剛開(kāi)始時(shí),由于左側(cè)都是按照?qǐng)D片來(lái)加載,并沒(méi)有出現(xiàn)任何問(wèn)題。使用Fresco庫(kù)加載,也不會(huì)出現(xiàn)列表滑動(dòng)時(shí),圖片錯(cuò)亂的問(wèn)題。

然而后續(xù)迭代時(shí),需要將圖片的背景和icon分離,方便產(chǎn)品配置顏色或者支持主題等。
因此這個(gè)ImageView就分為兩部分處理,icon部分繼續(xù)交給Fresco加載,背景部分則需要自己處理。這里是根據(jù)圖片的url來(lái)判斷,如果符合要求,則手動(dòng)構(gòu)造一個(gè)drawable并setBackground()到相關(guān)的view當(dāng)中去。

然而由于listview中,itemview的視圖實(shí)際上是會(huì)被復(fù)用的,因此當(dāng)對(duì)其中某些view設(shè)置了background后,滑動(dòng)幾次,這個(gè)view將可能被復(fù)用到各個(gè)itemview上,特別的,對(duì)于尾部的item,非常容易獲取到頭部item的緩存視圖。即便所有icon都能正常加載,但是item的背景依然會(huì)出現(xiàn)復(fù)用的情況。

知道問(wèn)題根源,解決其他就很簡(jiǎn)單,在adapter的getView方法中,判斷當(dāng)前viewHolder的類型,如果是末尾這種特殊的情況,手動(dòng)清理view的background即可。

PS:Android view.setBackgroundDrawable()方法已經(jīng)被設(shè)為廢棄,而view.setBackGround()方法最小支持sdk 16,項(xiàng)目最低支持sdk 15也是蛋疼。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,271評(píng)論 25 708
  • 一、適用場(chǎng)景 ListViewListview是一個(gè)很重要的組件,它以列表的形式根據(jù)數(shù)據(jù)的長(zhǎng)自適應(yīng)展示具體內(nèi)容,用...
    Geeks_Liu閱讀 11,004評(píng)論 1 28
  • 我是誰(shuí)。我每天都在過(guò)日子,卻不知道,我是什么樣的呢…… 現(xiàn)在我來(lái)回想一下自己,單從長(zhǎng)相上看,我是一個(gè)什么女孩呢...
    向日葵的花語(yǔ)閱讀 295評(píng)論 1 2
  • 小摩爾, 今天你興奮地告訴我你的數(shù)學(xué)期中考試成績(jī),媽媽真為你驕傲。但是最高興的肯定是你自己對(duì)吧? 雖然好成績(jī)帶來(lái)成...
    晶瑩晶瑩閱讀 161評(píng)論 0 1
  • 每個(gè)人在日常的工作中,都需要面對(duì)別人表達(dá)一些內(nèi)容,或許幾個(gè)人,或許幾十個(gè)人,甚至更多,這種表達(dá)方式都可以稱之為演講...
    余無(wú)忌閱讀 993評(píng)論 2 14

友情鏈接更多精彩內(nèi)容