滚动状态与编程式滚动
读取并控制列表滚动位置。
滚动状态与编程式滚动 是 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 反馈 — 无需本地设置。