RecyclerView浅析

A flexible view for providing a limited window into a large data set.

用来为大量数据集合提供有限窗口的灵活视图。通过数据展示、flexbile、视图复用等特性介绍RecyclerView

RecyclerView 数据展示设计思路:与ListView、GridView类似在有限窗口中展示大量数据集,复用成了他们的核心原理。

RecyclerView的职责就是将Datas中的数据以一定的规则进行展示,但其实RecyclerView只是一个ViewGroup,Data数据的具体结构不是很清晰。因此,RecyclerView需要一个Adapter(适配器模式)来与Datas绑定

RecyclerView 本质是一个ViewGroup,与常用的Layout一致,是View的容器。内部盛装的View来自于ViewHolder中的itemView,ViewHolder是根据Adapter要展示的内容与类型产生的。Adapter将要展示的内容、类型转换成对应的ViewHolder对其进行设置,然后RecyclerView把ViewHolder中的itemView展示出来。

Clinet:RecyclerView,Target:ViewHolder,Adapter:Adapter,Data:Adaptee—>适配器模式在RecyclerView中的体现。

RecyclerView表示只会和ViewHolder进行接触,而Adapter的工作就是将Data转换为RecyclerView认识的ViewHolder。因此RecyclerView就间接地认识了Datas。尽管Adapter已经将Datas转换为RecyclerView所熟知的View,但RecyclerView不管理这些View,它雇佣了一个叫做LayoutManager的大祭司来帮其完成布局(桥接模式),
LayoutManager协助RecyclerView来完成布局。但LayoutManager这个大祭司也有弱点,就是它只知道如何将一个一个的View布局在RecyclerView上,但它并不懂得如何管理这些View,如果大祭司肆无忌惮的玩弄View的话肯定会出事情,所以,必须有个管理View的护法,它就是Recycler,LayoutManager在需要View的时候回向护法进行索取,当LayoutManager不需要View(试图滑出)的时候,就直接将废弃的View丢给Recycler,
到了这里,有负责翻译数据的Adapter,有负责布局的LayoutManager,有负责管理View的Recycler,一切都很完美,但RecyclerView乃何等神也,它下令说当子View变动的时候姿态要优雅(动画),所以用雇佣了一个舞者ItemAnimator(观察者模式),因此,舞者也进入了这个图示:
如上,我们就是从宏观层面来对RecylerView有个大致的了解,可以看到,RecyclerView作为一个View,它只负责接受用户的各种讯息,然后将信息各司其职的分发出去。接下来我们将深入源码,详细讲解用到的设计模式,看看RecyclerView都是怎么来操作各个组件工作的。
P2

RecyclerView flexible 设计思路:

1、布局-----LayoutManager

RecyclerView将布局策略交给了LayoutManager,获取ViewHolder中的itemView,根据设置的布局策略对itemView布局然后添加到RecyclerView中。布局策略主要有LinearLayoutManager、GridLayoutManager、StagLayoutManager。

2、动画-----ItemAnimator

P3

RecyclerView 将动画机制交给了ItemAnimator,通过继承ItemAnimator实现其方法完成各式各样的动画效果。

作为一个展示大量数据的控件,当数据添加、删除、修改时通过调用Adapter notifyXXX方法。notify系列方法是发出一个事件,其工作原理是一个典型的观察者模式。RecyclerView是观察者,Adapter是可观察的;设置Adapter时RecyclerView订阅观察事件,当Adapter数据改变的时候通过RecyclerView并处理,触发重新布局,经过一些列处理将这些要展示的动画信息存储到ViewInfoStore中,在布局结束的时候通过ViewInfoStore统一处理并CallBack中方法调用ItemAnimator中方法执行动画。

3、装饰---ItemDecoration

RecyclerView内部在onDraw的时候执行ItemDecoration的onDraw,在draw的时候执行ItemDecorationonDrawOver,计算itemView的padding时将getItemOffses得到的Rect加入其中,从而空出装饰内容的区域。

RecyclerView 视图复用设计思路

P4

Recycler:is responsible for managing scrapped or detached item views for reuse.负责管理成为碎片的视图或者已经detached的视图,而从实现View的复用。

RecyclerViewPool:lets you share Views between multiple RecyclerViews.可以让你在多个RecyclerView之间分享视图。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

  • 【Android 控件 RecyclerView】 概述 RecyclerView是什么 从Android 5.0...
    Rtia阅读 307,454评论 27 439
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,907评论 25 707
  • 这篇文章分三个部分,简单跟大家讲一下 RecyclerView 的常用方法与奇葩用法;工作原理与ListView比...
    LucasAdam阅读 4,381评论 0 27
  • 3.14 RecyclerView详解 RecyclerView作为ListView和GridView的替代,但是...
    jianhuih阅读 6,638评论 1 5
  • 今天上了一天的标准化,老师讲的都明白,就是没作到位。没持续 转身用、:回家生发自己的标准化落地系统
    京心达张新波阅读 131评论 0 0