学习val listState = rememberLazyListState()

8 阅读2分钟

val listState = rememberLazyListState() 到底是什么?

一句话核心解释

kotlin

val listState = rememberLazyListState()

它就是 LazyColumn 的「遥控器 + 状态记录仪」

你可以通过它知道列表现在滑到哪了、控制列表滑动、获取列表所有状态

1. 拆成 3 段讲

① LazyListState

列表的状态管理器它里面存着:

  • 列表现在滑到第几条了
  • 屏幕上可见哪几条
  • 列表总共有多少条
  • 第一条可见 item 是哪个
  • 最后一条可见 item 是哪个

你要做「上拉加载更多」,必须靠它!

② rememberLazyListState()

创建一个列表状态,并且让它在屏幕旋转、重组时 不会丢失、不会重置

③ val listState = ...

把这个状态存起来,给 LazyColumn 使用。

2. 它怎么用?(最关键)

你必须把它绑定到 LazyColumn

kotlin

val listState = rememberLazyListState()

LazyColumn(
    state = listState  // 绑定
) {
    // ...
}

绑定后,你就能:

✅ 知道列表是否滑到底部
✅ 监听滑动
✅ 实现上拉加载更多
✅ 滚动到指定位置
✅ 获取当前滑动位置

3. 我们代码里用它来做什么?(核心)

kotlin

snapshotFlow { listState.layoutInfo }

这里就是从 listState 中取出:

  • 总条数
  • 最后可见条目索引

用来判断:

用户是不是滑到底了 → 是就加载更多

kotlin

val totalItems = layoutInfo.totalItemsCount         // 总条数
val lastVisibleIndex = layoutInfo.visibleItemsInfo.lastOrNull()?.index // 最后可见索引

// 判断:是不是快到底了
val shouldLoad = lastVisibleIndex >= totalItems - 2

4. 超级通俗比喻

  • LazyColumn = 汽车
  • listState = 方向盘 + 仪表盘

你要知道车开多快、滑到哪了、什么时候到终点必须看仪表盘(listState)

5. 总结(你只需要记住这句)

rememberLazyListState()
创建并保存 LazyColumn 的状态
实现上拉加载更多的必需品
列表的「位置记录仪 + 遥控器」

6. 它和我们前面代码的关系(完整链路)

kotlin

// 1. 创建状态
val listState = rememberLazyListState()

// 2. 绑定列表
LazyColumn(state = listState)

// 3. 监听滑动变化(用来做加载更多)
snapshotFlow { listState.layoutInfo }
    .distinctUntilChanged()
    .collect {
        // 判断是否滑到底 → 加载更多
    }