ListView的動態刷新問題——用notifyDataSetChanged沒作用


或許非常多開發的朋友。尤其是Android剛開始學習的人,在動態刷新ListView時。使用notifyDataSetChanged並沒有起到作用。

有時會被困擾得非常痛苦。

事實上,在使用notifyDataSetChanged過程中,還是有細節須要注意的。舉個樣例:

我的ListView使用的數據源是來自ArrayList。

通常我們的做法是創建一個已經有我們想要提供給ListView的數據的ArrayList,比如:

ArrayList<Integer> list  = new ArrayList<Interger>;
list.add(1);
這里我們的list已經是指向了一個堆內存上了。

接着我們想要改變list中的數據,而這個時候。就須要注意了,舉個樣例:我們在代碼中有另外一個ArrayList叫做newlist,它是使用以下代碼創建出來的:

ArrayList<Integer> newlist  = new ArrayList<Interger>;
list.add(2);

這個時候,newlist指向的是一個和list指向不同的堆內存,這個時候。我們直接用list = newlist來把newlist的數據交給list,在這里,實際上僅僅是把list的指向改變了。讓它也指向newlist指向的那個內存。

那么這個時候我們再調用notifyDataSetChanged這種方法來通知listview更新數據就起不了不論什么作用了。原因非常easy,就是list的指向已經改變。而調用notifyDataSetChanged會去檢查原來list指向的數據是否變化。可是這時的list已經不是原來的list了。所以它無法推斷。僅僅能不作出響應了。那么。這個問題的解決方法是直接在原來的list上面更改數據,能夠使用以下的代碼來操作:

list.clear();
list.addAll(newlist);
adapter.notifyDataSetChanged();
這樣。list的指向就不會改變,它還是指向原來那塊內存。這樣調用notifyDataSetChanged()就能夠起作用了。

總結:在這里的重點就是要注意在開始時傳給ListView的list指向不能被改變。須要從始至終指向同一個內存。這樣調用notifyDataSetChanged后就行檢測到list的數據變化,從而觸發ListView的又一次繪制了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM