@IT·互联网Android开发

听说你们家的NotifyDataSetChanged不起作用了

2016-09-29  本文已影响303人  代码咖啡

背景叨叨叨

前几天,公司项目准备上线,就在前一晚,出现了一个BUG:主页界面刷新无效。千钧一发之际,用了一个笨方法,每次刷新的时候重新setAdapter一下算是实现了基本功能,但是这样显然效率不高,数据很多的时候容易卡顿。当时时间紧也就没有对问题作过多的了解,现在回过头来对NotifyDataSetChanged无效的问题进行分析。

原因分析

查询资料,发现NotifyDataSetChanged无效有两个因素:数据源adapter本身,其问题原因可以总结为如下三点:

1. 数据源未更新
2. 数据源更新了,但是指向了新的引用
3. adapter没有收到消息通知

我出现的问题在于原因2,接下来讲讲原因2的解决方法。

解决方法

数据获取代码

从上图可以看到我将获取到的数据传入一个列表对象,然后直接以引用的方式将列表对象传给数据源,这时候数据源指向了新的内存空间,而adapter依然从原来的内存空间挖数据,所以导致不论刷新多少次数据,界面总是实现不了更新的效果。

不以引用的方式传递数据

我们的解决方法就是,不以引用的方式传递数据。既然我们用的是List,那么我们就可以调用List的clear()和addAll()方法,如此便可以解决我们遇到的问题。

——End——

上一篇下一篇

猜你喜欢

热点阅读