轉載請注明出處: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的方法來調用,避免創造出新的對象即可
