1RecyclerView是 Android 显示可滚动列表/网格的现代组件。它将数据与显示分离,使用Adapter提供数据,ViewHolder提高重用效率,LayoutManager控制布局。RecyclerView的关键目标是 高效回收与复用视图以减少内存与布局开销

核心角色:

  • RecyclerView:容器视图,负责触发创建、绑定与回收行为
  • Adapter:把数据映射成视图(create/bind)
  • ViewHolder:持有 item 的 View 引用,避免频繁 findViewById
  • LayoutManager:决定 item 如何排列(线性、网格、瀑布流或自定义)
  • ItemDecoration:控制分割线、间距、悬浮头等视觉装饰
  • ItemAnimator:控制增删改动时的动画

onCreateViewHolder什么时候调用?

RecyclerView的核心优势之一是它通过回收和重用视图来高效地处理列表。但在一开始或者当列表滚动到需要显示一种新型的项目视图,并且当前没有可重用的ViewHolder时,它就需要一个新的容器。

onCreateViewHolder()的作用正是:

  1. 创建初始化用于显示列表项的 View
  2. 将这个 View 包裹在一个新的ViewHolder对象中
  3. 将创建好的 ViewHolder返回RecyclerView

这里的 view 和 item 样式有本质区别:

onCreateViewHolder()调用的核心判断标准是 Item 的类型View Type

调用时机

  • 首次加载列表时: 列表需要填充屏幕和预取一些视图时会调用。
  • 需要新的视图类型时: 当列表滚动到需要显示一种不同布局类型(如果有多种 itemViewType)的项目,并且没有可重用的ViewHolder时。
  • 没有可重用的 ViewHolder 时: 当列表滚动,需要一个新的视图来显示新的数据,但在可回收池中找不到合适类型ViewHolder来重用时。

简而言之:

每当RecyclerView布局管理器确定需要一个新的、尚未创建的ViewHolder来显示屏幕上的项目时,就会调用它。

触发机制

  1. 初始化与填充屏幕: 当你第一次设置Adapter并将LayoutManager 附加到RecyclerView时,LayoutManager会计算需要显示多少个 Item 才能填满屏幕。
    • 例如,屏幕能显示 6 个 Item。LayoutManager就会请求Adapter创建 6 个ViewHolder。此时会调用 6 次onCreateViewHolder
  2. 滚动时需要新类型: 当用户滚动列表,新的 Item 即将进入屏幕时:
    • LayoutManager会首先检查缓存池(RecycledViewPool)
    • 如果缓存池中有相同View Type的、被滑出屏幕的ViewHolder,它就会重用这个ViewHolder,并调用onBindViewHolder更新数据。此时不会调用onCreateViewHolder
    • 如果缓存池中没有相同View Type的可用ViewHolder(例如,列表首次滚动到一种新的、不同的布局类型),LayoutManager就会向Adapter请求创建一个新的。此时onCreateViewHolder就会被调用。

调用顺序

  1. getItemCount()
    • 在初始化阶段调用,RecyclerView 需要知道总共有多少项
  2. 对于每个需要显示的项目,按以下顺序调用:
    a. getItemViewType(position)
- 首先确定该位置项目的视图类型

b. onCreateViewHolder(parent, viewType)

- 根据上一步确定的 viewType 创建相应的 ViewHolder
- 只有当没有可重用的相同类型的 ViewHolder 时才会调用此方法

c. onBindViewHolder(holder, position)

- 最后调用,将数据绑定到 ViewHolder 上
- 对每个可见项都会调用,即使是重用的 ViewHolder

更新: 2025-12-12 09:59:03
原文: https://www.yuque.com/dongpozhouzi-mshe3/zhm85g/iyleghtvg4gt1tsg


相关笔记