背景叨叨叨
前几天,公司项目准备上线,就在前一晚,出现了一个BUG:主页界面刷新无效。千钧一发之际,用了一个笨方法,每次刷新的时候重新setAdapter一下算是实现了基本功能,但是这样显然效率不高,数据很多的时候容易卡顿。当时时间紧也就没有对问题作过多的了解,现在回过头来对NotifyDataSetChanged无效的问题进行分析。
原因分析
查询资料,发现NotifyDataSetChanged无效有两个因素:数据源和adapter本身,其问题原因可以总结为如下三点:
1. 数据源未更新
2. 数据源更新了,但是指向了新的引用
3. adapter没有收到消息通知
我出现的问题在于原因2,接下来讲讲原因2的解决方法。
解决方法
数据获取代码从上图可以看到我将获取到的数据传入一个列表对象,然后直接以引用的方式将列表对象传给数据源,这时候数据源指向了新的内存空间,而adapter依然从原来的内存空间挖数据,所以导致不论刷新多少次数据,界面总是实现不了更新的效果。
不以引用的方式传递数据我们的解决方法就是,不以引用的方式传递数据。既然我们用的是List,那么我们就可以调用List的clear()和addAll()方法,如此便可以解决我们遇到的问题。
——End——
网友评论