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:

默认情况下,每个项目的状态都是针对列表中项目的位置键控。但是,如果数据集发生更改,这可能会导致问题,因为更改位置的项目实际上会丢失任何记住的状态。如果您想象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)
        
    

【讨论】:

以上是关于LazyColumn - 项目关键参数用途?的主要内容,如果未能解决你的问题,请参考以下文章

Jetpack Compose LazyColumn 以编程方式滚动到项目

Sid 属性在关键策略中的用途是啥?

Java 中 main() 方法中 public static 关键字的用途是啥?

LazyColumn 项目互斥

C#中'in'关键字的用途是啥? [复制]

LazyColumn 项目位置