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