LazyColumn - 项目关键参数用途?
Posted
技术标签:
【中文标题】LazyColumn - 项目关键参数用途?【英文标题】:LazyColumn - Items Key parameter purpose? 【发布时间】:2021-10-17 18:15:04 【问题描述】:谁能解释一下 LazyListScope 的 items/itemsIndexed 函数中 'key' 参数的主要用途是什么?如果我们指定该参数,我们会得到什么或没有得到什么?我不确定我是否了解与此参数相关的官方文档:
key - 代表项目的稳定且唯一的密钥工厂。使用 不允许列表中的多个项目使用相同的键。类型 密钥应该可以通过 android 上的 Bundle 保存。如果传递了 null 列表中的位置将代表键。当您指定 键滚动位置将根据键保持,这 表示如果您在当前可见项目之前添加/删除项目该项目 与给定的键将被保留为第一个可见的。
【问题讨论】:
相当复杂 【参考方案1】:我认为最好的答案是official doc:
默认情况下,每个项目的状态都是针对列表中项目的位置键控。但是,如果数据集发生更改,这可能会导致问题,因为更改位置的项目实际上会丢失任何记住的状态。如果您想象
LazyRow
在LazyColumn
中的场景,如果行更改项目位置,则用户将失去其在行内的滚动位置。
为了解决这个问题,您可以为每个项目提供一个稳定且唯一的密钥,为
key
参数提供一个块。 提供稳定的密钥可以使项目状态在数据集更改时保持一致:
@Composable
fun MessageList(messages: List<Message>)
LazyColumn
items(
items = messages,
key = message ->
// Return a stable + unique key for the item
message.id
) message ->
MessageRow(message)
【讨论】:
以上是关于LazyColumn - 项目关键参数用途?的主要内容,如果未能解决你的问题,请参考以下文章
Jetpack Compose LazyColumn 以编程方式滚动到项目