亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

mImageView.getTag().equals(mUrl)不是恒成立的嗎

寫上去也沒什么用啊

誰來解釋下

正在回答

3 回答

樓上沒說到點子上。這是【同時】使用ConvertView和異步機制造成的。一個屏幕一次顯示8個item,當第9個item劃進屏幕時,ListView對adapter說,返給我一個view,我要顯示。adapter調用getView()方法,由于使用了緩存機制,getView()在初始化8個item以后所有返回的view(ConvertView)內存地址都是這8個中的。如果【不使用】異步機制加載圖片,那么返回的這個ConvertView是被更新以后返給ListView使用的。效果是上滑屏幕沒反應,等了半天,突然加載出來,但是不會閃。然而這里使用了異步機制,也就是說先返回ConvertView,再等異步線程修改,這是閃的本質!由于教程里使每個異步線程人工阻塞了1s,那么上來有8個異步線程在運行(編號1-8),如果1s之內下滑了ListView比如說下滑了8個,那么新更新的8個item還是用的以前的內存,【并且】又開啟了8個異步線程(編號9-16)。因為預先設定了一個默認圖片,所以先顯示綠色的默認icon圖片。然后1-8號異步線程運行完畢,更新ImageView(閃),緊跟著9-16異步線程運行完畢,又更新imageView(閃)。最終顯示正確結果。這就是下滑時先顯示默認圖片,再閃一下錯誤圖片,最后閃一下正確圖片的本質過程。如果給每個ImageView設置了tag以后,當1-8號異步線程運行完畢后,會發消息給handler,讓他進行更新ui的操作,可是在1-8號線程發消息之前,9-16號線程已經更新了1-8和9-16共用的ImageView控件的tag,所以1-8號線程的消息雖然發給了handler,但是不滿足條件,handler不會進行ui更新。

2 回復 有任何疑惑可以回復我~
#1

丿M灬S灬N丨

理解到位,講述到位`
2016-08-21 回復 有任何疑惑可以回復我~
#2

jsbintask22

兄弟,學了多久了
2016-09-14 回復 有任何疑惑可以回復我~

我建議你們做個實驗,ListView中的item加一個checkbox控件。

1、假設item有20條。當前頁面能夠顯示的只有15條,也是剩下的5條,在不滑動的情況下,是看不到的。

2、當你選中第一條item的時候,再往下滑動。你會發現第16條的item也是被選中。而你根本沒有點擊過。

3、這是什么原因操作的,這是因為adapter在復用的時候造成。其實當第一條item不可見的時候,已經被第16條item復用了,第一條和第十六條item的區別就是里面的參數值。而第十六條item的其實是原封不動的第一條item。

4、以上表達的意思是視頻中出現的圖片問題的一種,滑動的時候,圖片會跳動先顯示一張,然后才顯示正確的。

5、至于說setTag和getTag的問題,子線程,它不是順序的,可能先執行的后加載完,后執行的先加載完,那就不是圖片跳動的問題,那就是錯亂的問題。什么意思呢,假如你第一個item通過異步方法獲取圖片然后setImageView。其實在多個線程的情況下,得到的bitmap不一定就是對應的那個bitmap。可能第一個item顯示的是第三個的圖片。

6、http://blog.csdn.net/lmj623565791/article/details/24333277?這里有分析adpterView 復用的問題。

2 回復 有任何疑惑可以回復我~
#1

sadfqjvoa

說的很好~之前我就在listview里加了checkbox,就發現點了一個,往后滑動,看到好幾個也選中了,現在看到這個回答終于明白了
2016-02-18 回復 有任何疑惑可以回復我~
#2

丿M灬S灬N丨

根本沒說到點子上。
2016-08-21 回復 有任何疑惑可以回復我~

android有可能導致兩個值不一樣

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Android必學-異步加載
  • 參與學習       50616    人
  • 解答問題       333    個

了解Android中的異步加載處理方法,這是面試問的最多的知識點

進入課程

mImageView.getTag().equals(mUrl)不是恒成立的嗎

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號