如果你的UI是GridView ListView等需要用到adapter添加數(shù)據(jù)的控件
那么有時(shí)候里面的數(shù)據(jù)改變了 List<>內(nèi)容改變了 那就要更新數(shù)據(jù)
關(guān)于adapter的數(shù)據(jù)更新
ada.notifyDataSetInvalidated();
ada.notifyDataSetChanged();
之前一位前輩的帖子比喻得很好
我們可應(yīng)用糧倉來解釋一下,兩者的區(qū)別。
notifyDataSetChanged:糧倉中得糧食少了,或者多了,發(fā)送通知。
notifyDataSetInvalidated:糧倉變換了,比如原來從A倉取糧食,現(xiàn)在換成了B糧倉。
情況不同則調(diào)用不用的函數(shù)進(jìn)行更新。
----------------------華麗分割線------------------------------------
但是在我的測試中,我發(fā)現(xiàn)我屬于第一種情況,則是只改變了數(shù)據(jù)的內(nèi)容 并沒有改變地址,沒有New一個(gè)新的數(shù)據(jù)源出來,按道理調(diào)用notifyDataSetChanged()就可以解決
但是當(dāng)我需要?jiǎng)h除里面一項(xiàng),把NUM減一,調(diào)用notifyDataSetChanged(),發(fā)現(xiàn)Item的第一項(xiàng) 或者是 前幾項(xiàng) 都消失了!
按一下其中一個(gè)Item,圖標(biāo)又恢復(fù)了正常的數(shù)目,正常的顯示。
最后多經(jīng)測試發(fā)現(xiàn) 一開始我的Item是10項(xiàng),如果你添加一項(xiàng) 刪一項(xiàng)把Item數(shù)目控制大于等于10項(xiàng),調(diào)用notifyDataSetChanged(),則不會(huì)有問題
當(dāng)你添加一項(xiàng),刪除兩項(xiàng),Item數(shù)目變成9項(xiàng),則比一開始你setAdapter()時(shí)那個(gè)項(xiàng)數(shù)少 則會(huì)錯(cuò)亂。
只是發(fā)現(xiàn)了這個(gè)規(guī)律,但是原理不知道,如果有大神知道請留下你的答案,感覺不盡。也希望能幫到卡在上面的童鞋。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注