写在前面:主要是结合自己的一些粗浅理解,大概翻译了一下google官方文档里对RecyclerView的说明。
RecyclerView:一个用于向大型数据集提供有限窗口的灵活视图。
专业术语:
Adapter:Adapter的一个子类,负责为代表数据集中的子项提供视图。
Position:适配器Adapter内数据子项的位置。
Index:已绑定的子视图的索引,用来调用ViewGroup。与Position相对应。
Binding:准备一个子视图,以显示适配器中相对应位置的数据的过程。
Recycle(view):之前用来显示适配器中特定位置的子项数据的视图,可以被放置在高速缓存中以备后用,以便之后再次用来显示相同类型的数据。
这样,通过跳过初始化布局的inflate或者构造极大地提升了性能。
Scrap(view):在布局期间已经进入临时分离状态的子视图。废弃视图Scrap views可以在没有与父视图RecyclerView完全分离的情况下重复使用,如果不需要重新绑定,就不需要修改废弃视图Scrap views;如果废弃视图Scrap views被认为是Dirty view,则由适配器Adapter来修改。
Dirty(view):必须被适配器重新绑定,才能被显示的子视图。
RecyclerView中的位置:
RecyclerView在RecyclerView.Adapter和RecyclerView.LayoutManager之间引入了一个额外的抽象层次,以便能够在布局计算期间,批量探测到数据集的变化。这节省了布局管理器LayoutManager跟踪适配器adapter的变化,以相应地改变布局动画所需要的计算量。同时这也有助于性能,因为所有的视图绑定同时发生,并且也避免了不必要的视图绑定。
因此,RecyclerView中有两种类型的位置相关方法:
-布局位置:在最新布局计算中的子项的位置。这是从布局管理器LayoutManager的视角来看的位置。
-适配器位置:子项在适配器中的位置。这是从适配器Adapter的视角来看的位置。
这两个位置是相同的,除了分派adapter.notify *事件和计算更新的布局之间的时间。
对于返回或者接收布局位置LayoutPosition的方法,使用返回或者接收的位置作为最新的布局计算。这些位置包括所有的变化,直到最后一次布局计算。
你可以依靠这些位置使得你看到的位置与用户目前在屏幕上看到的位置一致。例如,如果您在屏幕上有一个项目列表,并且用户要求第5个元素,则应该使用这些方法,因为它们与用户看到的内容相匹配。