標籤: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非同步載入圖片錯位,重複,閃爍分析以及解決方案