繁体   English   中英

LazyColumn - Items 关键参数用途?

[英]LazyColumn - Items Key parameter purpose?

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

key - 代表项目的稳定且唯一的密钥工厂。 不允许对列表中的多个项目使用相同的键。 密钥的类型应该可以通过 Android 上的 Bundle 保存。如果 null 被传递,列表中的 position 将代表密钥。 当您指定键时,滚动 position 将根据键进行维护,这意味着如果您在当前可见项目之前添加/删除项目,则具有给定键的项目将保留为第一个可见项目。

我认为最好的答案是由 官方文档提供的:

默认情况下,每个项目的state都是针对列表中项目的 position键入的。 但是,如果数据集发生变化,这可能会导致问题,因为更改 position 的项目实际上会丢失任何记住的 state。如果您想象LazyRow中的LazyColumn场景,如果行更改项目 position,则用户将在其中丢失滚动条 position该行。

为了解决这个问题,您可以为每个项目提供一个稳定且唯一的密钥,为key参数提供一个块。 提供稳定的密钥可以使项目 state 在数据集更改之间保持一致

@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)
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM