RecyclerView浅析
A flexible view for providing a limited window into a large data set.
用来为大量数据集合提供有限窗口的灵活视图。通过数据展示、flexbile、视图复用等特性介绍RecyclerView
RecyclerView 数据展示设计思路:与ListView、GridView类似在有限窗口中展示大量数据集,复用成了他们的核心原理。


RecyclerView 本质是一个ViewGroup,与常用的Layout一致,是View的容器。内部盛装的View来自于ViewHolder中的itemView,ViewHolder是根据Adapter要展示的内容与类型产生的。Adapter将要展示的内容、类型转换成对应的ViewHolder对其进行设置,然后RecyclerView把ViewHolder中的itemView展示出来。
Clinet:RecyclerView,Target:ViewHolder,Adapter:Adapter,Data:Adaptee—>适配器模式在RecyclerView中的体现。





RecyclerView flexible 设计思路:
1、布局-----LayoutManager
RecyclerView将布局策略交给了LayoutManager,获取ViewHolder中的itemView,根据设置的布局策略对itemView布局然后添加到RecyclerView中。布局策略主要有LinearLayoutManager、GridLayoutManager、StagLayoutManager。
2、动画-----ItemAnimator

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 视图复用设计思路

Recycler:is responsible for managing scrapped or detached item views for reuse.负责管理成为碎片的视图或者已经detached的视图,而从实现View的复用。
RecyclerViewPool:lets you share Views between multiple RecyclerViews.可以让你在多个RecyclerView之间分享视图。