V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
linhaiczy
V2EX  ›  Android

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

  •  
  •   linhaiczy · 2022-10-22 18:31:55 +08:00 · 8944 次点击
    这是一个创建于 790 天前的主题,其中的信息可能已经有所发展或是发生改变。
    使用 RecyclerView 展示 WiFi 列表,WiFi 列表内容刷新的时候由于不确定 WiFi 列表中的数据位置变化,所以使用 adapter.notifyDataSetChanged()刷新数据,但是这种方式每次刷新数据时都会造成闪烁的现象,想请教一下这个问题有没有比较好的解决方式
    9 条回复    2022-10-26 15:51:19 +08:00
    learningman
        1
    learningman  
       2022-10-22 18:53:30 +08:00 via Android
    手写个 diff 算法呗
    sth2018
        2
    sth2018  
       2022-10-22 18:56:20 +08:00
    每次都 set 新数据?
    darkengine
        3
    darkengine  
       2022-10-22 19:03:51 +08:00
    拿到列表之后按照某个字段(例如 ssid )排序,再展示。然后再记录个上次刷新时间,拿到数据之后先比较一下,间隔太小则忽略这次刷新。
    tanranran
        4
    tanranran  
       2022-10-22 19:07:32 +08:00
    DiffUtil 了解一下
    winterbells
        5
    winterbells  
       2022-10-22 21:32:46 +08:00
    notifydatasetchanged 是刷新整个列表
    notifyitemchanged 是刷新单个数据
    用 DiffUtil 或者自己搓一个,只更新修改的
    maninfog
        6
    maninfog  
       2022-10-22 22:37:19 +08:00 via iPhone
    其实那个闪烁是动画问题,把 item animation 设置成 null 就好了,diff util 算是更好的做法,还会帮你提供插入和删除以及交换的动画
    mxalbert1996
        7
    mxalbert1996  
       2022-10-23 00:16:02 +08:00 via Android
    ListAdapter 了解一下
    Anarchy
        8
    Anarchy  
       2022-10-23 15:24:24 +08:00
    notifyDataSetChanged 是不触发 Item 动画的,不确定可以先把 Item 动画关了。这种情况大概率是 item 的高度不固定,重新设置数据后高度发生变化导致重新布局,确认下 RecyclerView 和 item 是否都是固定高度。
    wesley0314
        9
    wesley0314  
       2022-10-26 15:51:19 +08:00
    控制好刷新的频率和范围,善用 playload 和 diffutil 。应该就可以解决这个问题了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2849 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 11:15 · PVG 19:15 · LAX 03:15 · JFK 06:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.