Android adapter.notifyDataSetChanged() 的原因及解決方法。


轉載請注明出處:http://blog.csdn.net/like_program/article/details/52517119

使用 Listview 的時候,給 adapter 的數據源 List 添加了新的數據,然后調用 adapter.notifyDataSetChanged(),發現 listview 並沒有顯示出新增的數據,但是遍歷輸出 List 中的元素,發現新增數據已經被添加到 List 中了,數據既然已經被添加到數據源中了,為什么 Listview 沒有更新呢?

上網,查書,查了半天,終於在《Android群英傳》中找到答案:

使用 adapter.notifyDataSetChanged() 時,必須保證傳進 Adapter 的數據 List 是同一個 List
而不能是其他對象,否則無法更新 listview。

即,你可以調用 List 的 add(), remove(), clear(),addAll() 等方法,這種情況下,List 指向的始終是你最開始 new 出來的 ArrayList ,然后調用 adapter.notifyDataSetChanged() 方法,可以更新 ListView;但是如果你重新 new 了一個 ArrayList(重新申請了堆內存),那么這時候,List 就指向了另外一個 ArrayLIst,這時調用 adapter.notifyDataSetChanged() 方法,就無法刷新 listview 了。

解決方法:

所有的數據修改都通過List的方法來調用,避免創造出新的對象即可


免責聲明!

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



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