android listview非同步載入圖片錯位,重複,閃爍分析以及解決方案

來源:互聯網
上載者:User

標籤:android   style   io   os   使用   sp   資料   on   問題   

我們在使用listview非同步載入圖片 的時候,在快速滑動或者網路不好的情況下,會出現圖片錯位,重複,閃爍等問題,其實這些問題總結起來就是一個問題,

比如listview上有100個item,一屏只顯示10個item,我們知道getView()中converView是用來複用view對象的,因為一個item的view對象,而imageview控制項就是view通過findViewById()獲得的,而我們在複用view對象時,也就是說這個imageview也被複用了,比如第11個item的view複用了第一個itemv iew對象,那麼imageview就同時被複用了,而顯示圖片是通過imageview控制項,所以當圖片沒下載出來,就這個imageview顯示的資料就是複用的資料

1:item圖片顯示重複?

這個顯示重複是指當前行item顯示了之前某行item的圖片

比如ListView滑動到第2行會非同步載入某個圖片,但是載入很慢,載入過程中listView已經滑動到了第14行,且滑動過程中該圖片載入結束,
第2行已不在螢幕內,根據上面介紹的緩衝原理,第2行的view可能被第14行複用,這樣我們看到的就是第14行顯示了本該屬於第2行的圖片,造成顯示重複


行item圖片顯示錯亂?
這個顯示錯亂是指某行item顯示了不屬於該行item的圖片。?
比如ListView滑動到第2行會非同步載入某個圖片,但是載入很慢,載入過程中listView已經滑動到了第14行,第2行已不在螢幕內,
根據上面介紹的緩衝原理,第2行的view可能被第14行複用,第14行顯示了第2行的View,這時之前的圖片載入結束,就會顯示在第14行,造成錯亂


行item圖片顯示閃爍?
上面b的情況,第14行圖片又很快載入結束,所以我們看到第14行先顯示了第2行的圖片,立馬又顯示了自己的圖片進行覆蓋造成閃爍錯亂


解決方案:

通過上面的分析我們知道了出現錯亂的原因是非同步載入及對象被複用造成的,如果每次

getView

能給對象一個標識,

在非同步載入完成時比較標識與當前行

item

的標識是否一致,

致則顯示,否則不做處理即可

通過上面的分析我們知道了出現錯亂的原因是非同步載入及對象被複用造成的,如果每次

getView

能給對象一個標識,

在非同步載入完成時比較標識與當前行

item

的標識是否一致,

致則顯示,否則不做處理即可

通過上面的分析我們知道了出現錯亂的原因是非同步載入及對象被複用造成的,如果每次getView能給對象一個標識,在非同步載入完成時比較標識與當前行item的標識是否一致,一致則顯示,否則不做處理即可


原理:首先給imageview設定一個tag,這個tag中設定的是url,然後在載入的時候取得這個url和要載入那position中的url對比,如果不相同就載入,相同就是複用以前的就不載入了

android listview非同步載入圖片錯位,重複,閃爍分析以及解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.