使用 RecyclerView 展示 WiFi 列表,WiFi 列表内容刷新的时候由于不确定 WiFi 列表中的数据位置变化,所以使用 adapter.notifyDataSetChanged()刷新数据,但是这种方式每次刷新数据时都会造成闪烁的现象,想请教一下这个问题有没有比较好的解决方式

1 learningman Oct 22, 2022 via Android 手写个 diff 算法呗 |
2 sth2018 Oct 22, 2022 每次都 set 新数据? |
3 darkengine Oct 22, 2022 拿到列表之后按照某个字段(例如 ssid )排序,再展示。然后再记录个上次刷新时间,拿到数据之后先比较一下,间隔太小则忽略这次刷新。 |
4 ByteRan Oct 22, 2022 DiffUtil 了解一下 |
5 300 Oct 22, 2022 notifydatasetchanged 是刷新整个列表 notifyitemchanged 是刷新单个数据 用 DiffUtil 或者自己搓一个,只更新修改的 |
6 maninfog Oct 22, 2022 via iPhone 其实那个闪烁是动画问题,把 item animation 设置成 null 就好了,diff util 算是更好的做法,还会帮你提供插入和删除以及交换的动画 |
7 mxalbert1996 Oct 23, 2022 via Android ListAdapter 了解一下 |
8 Anarchy Oct 23, 2022 notifyDataSetChanged 是不触发 Item 动画的,不确定可以先把 Item 动画关了。这种情况大概率是 item 的高度不固定,重新设置数据后高度发生变化导致重新布局,确认下 RecyclerView 和 item 是否都是固定高度。 |
9 wesley0314 Oct 26, 2022 控制好刷新的频率和范围,善用 playload 和 diffutil 。应该就可以解决这个问题了 |