【问题标题】:LazyColumn - Items Key parameter purpose?LazyColumn - 项目关键参数用途?
【发布时间】:2021-10-17 18:15:04
【问题描述】:

谁能解释一下 LazyListScope 的 items/itemsIndexed 函数中 'key' 参数的主要用途是什么?如果我们指定该参数,我们会得到什么或没有得到什么?我不确定我是否了解与此参数相关的官方文档:

key - 代表项目的稳定且唯一的密钥工厂。使用 不允许列表中的多个项目使用相同的键。类型 密钥应该可以通过 Android 上的 Bundle 保存。如果传递了 null 列表中的位置将代表键。当您指定 键滚动位置将根据键保持,这 表示如果您在当前可见项目之前添加/删除项目该项目 与给定的键将被保留为第一个可见的。

【问题讨论】:

  • 相当复杂

标签: android kotlin android-jetpack-compose


【解决方案1】:

我认为最好的答案是official doc

默认情况下,每个项目的状态都是针对列表中项目的位置键控。但是,如果数据集发生更改,这可能会导致问题,因为更改位置的项目实际上会丢失任何记住的状态。如果您想象LazyRowLazyColumn 中的场景,如果行更改项目位置,则用户将失去其在行内的滚动位置。

为了解决这个问题,您可以为每个项目提供一个稳定且唯一的密钥,为 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)
        }
    }
}

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2021-11-07
    • 2021-10-13
    • 2021-11-30
    • 2022-11-07
    相关资源
    最近更新 更多