Google I/O 2016 RecyclerView的前世今生,原理详解等

在引出RecyclerView之前,先说一下ListView

ListView特点及优化

ListView有下面几个特点

  1. 只创建用户可以看见的View
  2. 在用户滚动到之前将view准备好(在火车到达之前,快速铺轨道)
  3. 显示的什么就是什么
  4. 模糊的(notifyDataChanged)

还有,做item动画是麻烦的(notifyDataChanged)
somethingChanged….

后来为ListView做了优化

  1. ViewHolder回收和resuse单元
  2. 单独的视图创建和绑定
  3. 使用标准的framwork 处理focuse和input

OK、为了更容易添加动画、更好标准的利用ViewHolder、动态的改变布局
下面有例子、这是他的动图
这里写图片描述

RecylerView

这里写图片描述

LayoutManager是统一管理布局样式

像瀑布流和横向滚动

Adapter

item交互处理(点击等)
多个视图类型
recycler回收(onFailedToRecyclerView)
细粒度的数据改变事件(notifyItem…)

这里写图片描述

LayoutManager要获取View
RecylerView从cache中获取,如果有直接返回view
RecyclerView从Recyled Pool获取holder,adapter-binderViewHolder 返回view
RecykerView获取viewType,adapter负责创建holder
最后将view给LayoutManager

存储(ReServes)

这里写图片描述
判断是否有效

销毁(Death)

这里写图片描述
是暂时性的吗,是的话不循环利用了,adapter默认返回true,

Child Helper

这里写图片描述
为了使动画删除或增加的时候,不让LayoutManager从本身的列表中获取,因为还没有remove掉。
给LayoutManager提供一个虚拟的children列表,

在这里就要注意一点,获取position的时候,需要viewHolder.getAdapterPosition();
只有holder才知道真正的位置
这里写图片描述
removeAtPosition(holder.getAdapterPosition());
还有要注意的问题,onCreateViewHolder,就是创建新的ViewHolder
这里写图片描述
不要通过判断holder是否为空再返回。

AdapterHelper

remove () 删除某个item、 告诉LayoutManager 计算布局之前,61已经不存在了
(各种欺骗LayoutManager)

itemDecoration(一般用来画下划线)

自定义RecyclerView画布上绘画
底部可以抵消视图边界
可以有多个itemDecorations

ItemTouchHelper

同时支持swipe并拖动
适用于任何LayoutManager
item配置方向和动作
这里写图片描述

demo
https://github.com/shf981862482/RecyclerViewItemTouch

最后上youtube的详细视频、注意带梯子
https://www.youtube.com/watch?v=LqBlYJTfLP4

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值