Jetpack Compose Academy · 课时

滚动状态与编程式滚动

读取并控制列表滚动位置。

第 4 / 4 课13 个步骤

滚动状态与编程式滚动 是 CoddyKit 上的免费 Jetpack Compose Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Jetpack Compose Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Jetpack Compose Academy 课程共包含 4 节课。

控制滚动

有时您需要读取列表已经滚动了多远,或者自行将它跳转到某个位置。这正是滚动状态的作用。🎚️

rememberLazyListState

使用 rememberLazyListState 创建并保存列表状态,然后将它传递给 LazyColumn、LazyRow 或网格。

val listState = rememberLazyListState()
LazyColumn(state = listState) { }

网格也有状态

网格使用自己的状态持有器 rememberLazyGridState。以同样的方式连接它,即可跟踪并控制 LazyVerticalGrid。

val gridState = rememberLazyGridState()
LazyVerticalGrid(state = gridState, columns = GridCells.Fixed(2)) { }

读取第一个项目

从状态中读取 firstVisibleItemIndex,即可知道当前位于视口顶部的是哪一个项目。

val firstIndex = listState.firstVisibleItemIndex

检测滚动方向

isScrollInProgress 标志会告诉您用户是否正在主动滚动,这在用户滚动时隐藏工具栏等场景中很有用。

if (listState.isScrollInProgress) hideToolbar()

立即跳转

如果要不使用动画直接跳转到某个项目,请在协程作用域中调用 scrollToItem。

scope.launch {
    listState.scrollToItem(index = 0)
}

平滑滚动

如果想要平缓滑动而不是直接跳转,请使用 animateScrollToItem。它非常适合用于“返回顶部”按钮。

scope.launch {
    listState.animateScrollToItem(0)
}

为什么需要协程作用域

滚动是挂起操作,因此必须在协程中运行。获取一个 rememberCoroutineScope,即可在点击事件中启动它。

val scope = rememberCoroutineScope()
Button(onClick = { scope.launch { listState.animateScrollToItem(0) } }) { }

显示“返回顶部”按钮

将这两个思路结合起来:根据 firstVisibleItemIndex 推导可见性标志,然后在点击时使用动画滚动到零位置。

val showFab by remember {
    derivedStateOf { listState.firstVisibleItemIndex > 5 }
}

在重新组合后保留

由于状态被记忆,滚动位置会在重新组合后保留。使用 rememberSaveable 变体,还可以让它在屏幕旋转后继续保留。

状态驱动界面

这一模式始终如一:保存滚动状态,读取它以响应当前位置,并调用其中的滚动函数自行移动列表。

快速检查

思考平滑滚动。

回顾:滚动控制

您学会了保存滚动状态、读取 firstVisibleItemIndex,并从协程中使用 scrollToItem 和 animateScrollToItem 控制列表。🚀

免费开始

用 AI 导师学习 Kotlin — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「滚动状态与编程式滚动」课时是免费的吗?

是的 — 「滚动状态与编程式滚动」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Jetpack Compose Academy 课程的其余内容,请升级到 CoddyKit PRO。 Jetpack Compose Academy 课程共包含 4 节课。

「滚动状态与编程式滚动」这节课中我会学到什么?

读取并控制列表滚动位置。 你通过在浏览器中直接运行的动手代码来练习 Jetpack Compose Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Jetpack Compose Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Jetpack Compose Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「滚动状态与编程式滚动」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Jetpack Compose Academy 课中编写并运行代码吗?

能。每节 Jetpack Compose Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. LazyVerticalGrid 画廊
  2. 使用 LazyRow 构建轮播
  3. 自适应与固定网格单元
  4. 滚动状态与编程式滚动
← 返回 Jetpack Compose Academy