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

背景叨叨叨

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

原因分析

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

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

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

解决方法

数据获取代码

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

不以引用的方式传递数据

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

——End——

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术记录

谈谈序列化—实体bean一定要实现Serializable接口?

导读:最近在做项目的过程中,发现一个问题,就是我们最开始的时候,传递参数包括返回类型,都有map类型。但是由于map每次都要匹配key值,很麻烦。所以在之后就将...

3628
来自专栏LuckQI

Java核心技术讲解学习

1212
来自专栏玄魂工作室

如何学python-第四课 基本的用户输入

译者注:原作者留的练习任务都比较灵活,并不是具体的要求。而根据我自身的经验,很多同学看到这种需要探索精神的要求,可能就不愿意自己去进一步探索了(或者不知道具体要...

3008
来自专栏张善友的专栏

我为何需要使用空接口?

FxCop设计规则中的第三条提供了对空接口的检查.下面是它的描述: 一个接口提供了一组行为和使用契约(usage contract),任何一个类型都可以实现这个...

1935
来自专栏Java社区

Java核心技术讲解学习

1403
来自专栏WeTest质量开放平台团队的专栏

Go语言之三驾马车

从 Python 到 Go,远离舒适区,保持饥饿。

1581
来自专栏逸鹏说道

04. Web大前端时代之:HTML5+CSS3入门系列~Input新增类型

Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 1.tel:输入...

2787
来自专栏编程

Python教程2

前言 有关标准对象和模块的说明,请参阅Python标准库(https://docs.python.org/3/library/index.html#librar...

2149
来自专栏小程序·云开发专栏

小程序·云开发的云函数路由高级玩法

在掘金开发者大会上,在推荐实践那里,我有提到一种云函数的用法,我们可以将相同的一些操作。

8.6K12
来自专栏Python入门

这4个Python实战项目,让你瞬间读懂Python!

Python当下真的很火。Python实战项目,也一直尤为关注,接下来,和大家介绍下十个Python练手的实战项目

1854

扫码关注云+社区