前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >听说你们家的NotifyDataSetChanged不起作用了

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

作者头像
代码咖啡
发布2018-08-28 10:10:43
1.7K0
发布2018-08-28 10:10:43
举报
文章被收录于专栏:程序员叨叨叨程序员叨叨叨
背景叨叨叨

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

原因分析

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

代码语言:javascript
复制
1. 数据源未更新
2. 数据源更新了,但是指向了新的引用
3. adapter没有收到消息通知

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

解决方法

数据获取代码

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

不以引用的方式传递数据

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

——End——

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.09.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景叨叨叨
  • 原因分析
  • 解决方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档