RecyclerView各种更新功能总结

前言

RecyclerView提升性能很重要的一点就是支持局部更新效果,以前的ListView如果修改了数据通常要调用notifyDatasetChanged导致整个ListView内的布局都要重新刷新,现在RecyclerView除了全部刷新的方法之外还提供了单项、多条数据更新的回调方法。

增删改交换

方法 意义
notifyItemInserted(int item) 通知增加了单条数据
notifyItemRemoved(int item) 通知删除了单条数据
notifyItemChanged(int item) 通知修改了单条数据
notifyItemMoved(int from, int to) 通知移动了两条数据
notifyItemRangeInserted(int pos, int count) 通知增加了一批数据
notifyItemRangeRemoved(int pos, int count) 通知删除了一批数据
notifyDataSetChanged() 通知所有的数据发生了变化,前面的更新方式都有动画效果(如果用户设置了),这种更新方式没有动画效果

DiffUtils整体绑定

DiffUtils是Android7.0新引入的工具,用来对比当前的旧数据和新得到的数据之间的差异,最后通过上面的各种通知操作完成更新,这种实现优点在数据基本上相同的情况下只更新修改的少量数据,不必对整体的列表数据做刷新操作,而且还支持数据的刷新的各种动画效果。实现时首先需要定义对比新旧数据的回调接口,然后工具计算会返回差异结果,最后将差异结果提交个Adapter来刷新RecyclerView,刷新的时候发现数据有变化的条目所有的控件都会被重新设置内容,所以也就是整体绑定,如果用户希望只设置内容改变的控件可以使用后面提到的部分绑定。

// RecyclerView.Adapter的子类方法,负责更新所有数据
public void replace() {
    this.data = userList;
    DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new DiffUtil.Callback() {
        // 旧数据的数量
        @Override
        public int getOldListSize() {
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值