Jetpack Compose Academy · 课时

稳定快速列表的键

帮助 Compose 在变化过程中跟踪项目。

第 3 / 4 课13 个步骤

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

Compose 如何跟踪各行

默认情况下,Compose 会根据每行在列表中的位置来识别它。项目零就是项目零,项目一就是项目一,以此类推。

发生变化时位置会失效

插入或删除一行后,下面的每个项目都会改变位置。Compose 会认为这些行发生了变化,从而不必要地重新构建它们。

混淆带来的代价

重新构建的行会丢失其状态和动画。删除一个项目可能会导致整个列表闪烁,因为 Compose 会重新排列它下方的所有内容。

为每个项目提供键

键是一个稳定且唯一的值,它根据项目的身份而不是位置为项目命名。这样,即使项目移动,Compose 也能继续跟踪它们。

items(users, key = { it.id }) { user ->
    Text(user.name)
}

使用真正唯一的标识符

最好的键是来自数据的真正唯一标识符,例如数据库标识符。无论项目位于何处,它都保持不变。

键必须唯一

列表中的每个键都必须不同。重复的键会抛出运行时错误,因此绝不要使用两个行可能共享的值作为项目键。

不要使用索引作为键

使用索引作为键会违背设计目的,因为索引和位置一样会发生变化。只有在确实没有标识符时,才考虑使用它。

状态会跟随项目

使用稳定的键后,行的记忆状态会随行一起移动。即使删除了上方的项目,复选框仍会保持选中状态。

键为动画提供支持

稳定的键允许 Compose 为移动、出现或离开的项目添加动画。没有键时,它无法区分移动和重新构建。

items(items, key = { it.id }) { item ->
    Text(item.label, Modifier.animateItem())
}

itemsIndexed 也支持键

itemsIndexed构建器同样接受键 lambda。您仍然可以获得索引,同时为每一行提供稳定的身份。

itemsIndexed(data, key = { _, item -> item.id }) { i, item ->
    Text("$i: ${item.name}")
}

键几乎总是值得使用

对于任何可能发生变化的列表,添加键只需付出很小的努力,却能带来很大收益:正确的状态、流畅的动画以及更少的重新构建。

快速检查

什么样的列表键才是好的键?

回顾:稳定的键,稳定的列表

键赋予项目超越位置的身份。使用真正唯一的标识符,确保键保持唯一,状态和动画就能正常工作。✨

免费开始

用 AI 导师学习 Kotlin — 免费

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

课程
30
课程
120

常见问题解答

「稳定快速列表的键」课时是免费的吗?

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

「稳定快速列表的键」这节课中我会学到什么?

帮助 Compose 在变化过程中跟踪项目。 你通过在浏览器中直接运行的动手代码来练习 Jetpack Compose Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

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

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

「稳定快速列表的键」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. LazyColumn 与可滚动 Column
  2. items 与 itemsIndexed
  3. 稳定快速列表的键
  4. 粘性页眉与分区列表
← 返回 Jetpack Compose Academy