Android ListView notifyDataSetChanged()不刷新数据

一、错误代码

今天使用listview刷新数据的时候,调用notifyDataSetChanged并没有刷新数据,看一下代码发现逻辑没有问题啊,每次修改之后刷新列表的时候,roomDatas获取数据,在调用notifyDataSetChanged。

Android ListView notifyDataSetChanged()不刷新数据_第1张图片

二、解决问题

咋一看上面的没有问题,其实roomDatas每次都被赋值一个新的list对象,应该adapter的list应该也会发生变化。

但是事实上并不是这个这样的,当构造Adapter适配器,数据列表dataList传递过去时,是把roomDatas指向的地址副本作为参数传递给了adapter中的list成员变量了,因此roomDatas指向的内存区域和adapter中list指向的内存区域是同一块内存区域。

Android ListView notifyDataSetChanged()不刷新数据_第2张图片

 

  对roomDatas的内存指向做了修改,但是该指向并没有通知到adapter中的list,也就是说list指向没有发生变化,还是指向原来修改前的内存区域,因此dataList的改变并不能引起list的改变,本质上来说list没有发现数据有变化。

Android ListView notifyDataSetChanged()不刷新数据_第3张图片

 

当我们想要更换ListView中的所有数据时,先将数据移除,再重新添加数据或更换新的内存区域指向

Android ListView notifyDataSetChanged()不刷新数据_第4张图片

具体代码改成这样即可:

Android ListView notifyDataSetChanged()不刷新数据_第5张图片

 

你可能感兴趣的:(Android基础)