Android RecycleView.Adapter/ListAdapter使用submitList的一些问题 【日积月累计划】

最近在开发一个简单的安卓app。有很长一段时间没用安卓了,引入jetpack之后开发变化很大。在参考了google自己出的RecycleView教程之后,满以为可以使用RecycleView不会出现什么问题了。

想不到该来的还是来了。话说一番操作之后做了一个扫描连接设备的界面,但是发生了一下奇怪的事情。

按下刷新按钮,RecycleView不出现任何新的item。但是如果我按一下editText的框,然后就出现了。为了便于理解问题的根源,我想简单交代一下目前更新RecycleView的方法。

1、用一个刷新按键,去获得设备节点的连接情况。扫描上来一个就生成这个设备的操作图标。

2、为了减少建立list的损耗。我用一个MutableList去获得节点信息。点刷新按钮的时候清空list。然后获得一个就增加一个。

3、用一个绑定list数量的私有的MutableLiveData,一个共有的LiveData通过get和MutableLiveData绑定。因此如果刷新到新的节点就改变MutableLiveData的节点数目。

4、用一个observer去观察LiveData的数据(节点数目的变化)。为了方便调试,每次数据改变,同时显示一个Toast。然后用submitList去通知ListAdapter去更新Adapter。

5、用一个ListAdapter去绑定了RecycleView。用DiffUtil来更新数据。

~~~~~~~~~~~~~~~~~~~~~~

结果就出现了上面的情况。

官方有类似的demo,但大多数都绑定room里面的数据。在一番操作之后无果,只好求助stackoverflow。有这样一篇帖子:https://stackoverflow.com/questions/49726385/listadapter-not-updating-item-in-recyclerview/66384801#66384801

(其实里面的原因我考虑过,但是当时的操作方法是在LiveData里面存一个表。每次postValue这个固定的表。但是无效。)

废话不多说:官方文档有相关描述: submits a new list to be diffed and displayed.正如那位老哥说的:

This is why whenever you call submitList on the previous (already submitted list), it does not calculate the Diff and does not notify the adapter for change in the dataset.

就是说每次都需要提交一个新表。stackoverflow上面有多种方法。最奇特的是引用toMutableList方法。这种方法最简单,但不好理解。也有人override了submitList。但是我觉得最好是在adapter里面新建一个方法,然后在里面新建一个list。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值