android LazyColumn -项目关键参数的用途?

sirbozc5  于 2022-12-02  发布在  Android
关注(0)|答案(1)|浏览(169)

有人能解释一下LazyListScope的items/itemsIndexed函数中的**'key'**参数的主要用途吗?如果我们指定该参数,我们会得到什么或得不到什么?我不确定我是否理解与此参数相关的官方文档:
key -代表项目的稳定且唯一的键的工厂。不允许对列表中的多个项目使用同一个键。键的类型应该可以通过Android上的Bundle保存。如果传递null,则列表中的位置将代表键。当您指定键时,滚动位置将基于键进行维护,这意味着如果在当前可见项之前添加/删除项,则具有给定键的项将保留为第一个可见项。

ogq8wdun

ogq8wdun1#

我认为最好的答案是由官方提供的doc:
默认情况下,每个项目的状态都是根据项目在列表中的位置键入的。但是,如果数据集发生更改,这可能会导致问题,因为更改位置的项目实际上会丢失所有记忆的状态。如果您想象LazyColumn中的LazyRow的场景,如果行更改了项目位置,用户将丢失该行中的滚动位置。
为了解决这个问题,您可以为每个项目提供稳定且唯一的索引键,为**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)
        }
    }
}

相关问题