使用 RecyclerView 动态展示 WiFi 列表数据刷新时的闪烁问题

2022-10-22 18:31:55 +08:00
 linhaiczy
使用 RecyclerView 展示 WiFi 列表,WiFi 列表内容刷新的时候由于不确定 WiFi 列表中的数据位置变化,所以使用 adapter.notifyDataSetChanged()刷新数据,但是这种方式每次刷新数据时都会造成闪烁的现象,想请教一下这个问题有没有比较好的解决方式
8525 次点击
所在节点    Android
9 条回复
learningman
2022-10-22 18:53:30 +08:00
手写个 diff 算法呗
sth2018
2022-10-22 18:56:20 +08:00
每次都 set 新数据?
darkengine
2022-10-22 19:03:51 +08:00
拿到列表之后按照某个字段(例如 ssid )排序,再展示。然后再记录个上次刷新时间,拿到数据之后先比较一下,间隔太小则忽略这次刷新。
tanranran
2022-10-22 19:07:32 +08:00
DiffUtil 了解一下
winterbells
2022-10-22 21:32:46 +08:00
notifydatasetchanged 是刷新整个列表
notifyitemchanged 是刷新单个数据
用 DiffUtil 或者自己搓一个,只更新修改的
maninfog
2022-10-22 22:37:19 +08:00
其实那个闪烁是动画问题,把 item animation 设置成 null 就好了,diff util 算是更好的做法,还会帮你提供插入和删除以及交换的动画
mxalbert1996
2022-10-23 00:16:02 +08:00
ListAdapter 了解一下
Anarchy
2022-10-23 15:24:24 +08:00
notifyDataSetChanged 是不触发 Item 动画的,不确定可以先把 Item 动画关了。这种情况大概率是 item 的高度不固定,重新设置数据后高度发生变化导致重新布局,确认下 RecyclerView 和 item 是否都是固定高度。
wesley0314
2022-10-26 15:51:19 +08:00
控制好刷新的频率和范围,善用 playload 和 diffutil 。应该就可以解决这个问题了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/888983

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX