RecyclerView(一)

本文详细介绍了RecyclerView的概念及其核心组件,包括Adapter、Position等,并解释了不同类型的Position的区别及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简述

RecyclerView是易于扩展的视图,为有限的数据集合提供窗口呈现。

RecyclerView


extends ViewGroup
implements ScrollingView NestedScrollingChild

已知的直接子类
HorizontalGridViewViewGroup显示水平滚动列表中的条目。
VerticalGridViewViewGroup显示垂直滚动列表中的条目。

术语表

Adapter: 是RecyclerView.Adapter的子类,负责将数据集合转化为Views。

Position:Adapter中的数据集合的下标。

Index:已经attached 的child view 的下标,例如:getChildAt(int)

Binding:处理子视图,并将适配器中的数据与子视图绑定的过程。

Recycle(View):以前一个视图用于显示数据为一个特定的适配器的位置可以放置在一个缓存,以备重用以后再显示同样的数据。通过跳过解析布局文件或重新构建视图实例,从而大大提高性能。

Scrap (view):
1. 在 layout 阶段,子视图短暂性进入分离状态。Scrap允许在没有完全脱离 RecyclerView 之前进行重用、修改。那些不再需要重新绑定到或修改适配器操作的 View 将被认定为是 Dirty。
2. scrapped view是指view 仍然 attached 在其父视图 RecyclerView 上,但是已经被标记为 removal或reuse。

Dirty (view):子视图必须先与适配器重新绑定,才能够被正确显示。

Positions in RecyclerView:

RecyclerView介绍了在抽象层上的关联,RecyclerView.AdapterRecyclerView.LayoutManager能够在 layout 计算阶段批量检测数据集的变更。这样节省了 LayoutManager 跟踪 adapter 的变更计算动画的时间。它同样也在性能上有所提升,因为所有的视图都会在同一时刻绑定,且避免了不必要的绑定。

因由上述原因,此处列出了两种 position 在 RecyclerView关联的方法:
1. layout position:最新的layout 计算中,item 所处的下标。
2. adapter position:adapter 中数据 item 所处的下标。

这两者 position 均是一致的,除了分发 adapter.notify*的时间及计算 updated layout。

方法返回或接收*LayoutPosition*,均使用最新的 layout 计算后的 position。(例如:getLayoutPosition()findViewHolderForLayoutPosition(int))。当有 layout 计算更新时,上述所有方法也会随着更新。因此你可以依靠 position 来确定用户可见区域信息。(例如,当用户有诉求看第5个元素时,你可以使用这些方法来呈现第5个元素。)

另一种 position 的集合的形式类似于*AdapterPosition*。(例如:getAdapterPosition()findViewHolderForAdapterPosition(int))。当你需要实时的获取 adapter 的 position 的数据时,甚至于它们尚未被关联布局时,使用这些方法是合理的。比如,当你希望访问某个 ViewHolder的click 事件,你应该使用getAdapterPosition()。注意,这些方法不会因为调用notifyDataSetChanged()或其他新的 layout 而使之更新。因此,你需要小心的处理NO_POSITION或者null的情况。

当重写RecyclerView.LayoutManager时,大多数时候建议使用 layout positions。而重写RecyclerView.Adapter时则建议使用 adapter position

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值