概览
<p>一种用于在有限的窗口显示大量数据集合的组件。</p>
术语
- 适配器:RecycleView.Adapter的子类,为数据集合中的条目提供视图。
- 位置:适配器中的数据条目的位置
- 索引:用于获得子视图组件,常常用于getChildAt(int)中。
- 捆绑/粘合/绑定:一个将适配器中特定位置的数据绑定在子视图中的动作。
- 回收:指一个之前用于显示适配器中数据的视图并存在缓冲区中,之后被用来显示同样类型的数据。通过忽略布局的初始化和构造函数,这可以显著提高性能。
- Scrap:待补充
- Dirty:待补充
RecycleView中的位置
在RecycleView.Adatper和RecycleView.LayoutManager中,RecycleView引进了额外的抽象层次以监听不具计算中数据集合的批量变化。这为LayoutManager在追踪适配器变化计算动画时省下不少功夫。同时,这也可以为所有视图捆绑和避免不必要的捆绑中提高性能。
因此,在RecycleView中的相关方法中,有两种类型的位置。
- 布局位置:从LayoutManager的角度看,条目在最新布局计算中的位置。
- 适配器位置:从适配器的角度看,条目在是适配器中的位置。
这两种类型的位置是等同的,除非在分发adapter.notify*事件和更新布局时。
返回布局位置的方法使用最近一次布局运算后的位置,如getLayoutPosition()和findViewHolderForLayoutPosition(int)。这些位置包含了最近一次布局运算后的变化。你可以根据这些位置来与用户正在屏幕上看到的保持一致。比如,你有一个条目列表,当用户请求第5个条目时,你可以使用这些方法来匹配用户看到的。
另外一系列方法与AdapterPosition关联,比如getAdapterPosition()和findViewHolderForAdapterPosition(int)。当你想获得条目在更新后的适配器中的位置使用这些方法,即使这些位置变化还没反映到布局中。比如,你想访问适配器中条目的位置时,就应该使用getAdapterPosition()。注意,如果notifyDataSetChanged()已经被调用而且还没计算新布局,这些方法或许不能够计算适配器位置。所以,你要小心处理这些方法返回NO_POSITION和null的情况。
总之,当使用RecycleView.LayoutManager时使用布局位置。与此同时,使用RecycleView.Adapter时,使用适配器位置。
内部静态抽象类Adapter
该类是适配器的基类,为显示在RecycleView视图中的数据和RecycleView中的视图提供粘合。
内部静态抽象类ViewHolder
一个ViewHolder描述了一个条目视图和有关在RecycleView中的位置信息。
RecycleView.Adapter的实现应该继承ViewHolder并添加开销较大的方法findViewById(int).
ViewHolders之于Adapter,就像RecycleView.LayoutParams之于Recycle.LayoutManager.
以上翻译还差些火候和内涵,待以后对RecycleView的理解加深后修改。