有人可以解释一下它的主要目的是什么吗'key'LazyListScope 的 items/itemsIndexed 函数内的参数?如果我们指定该参数,我们会得到什么或不会得到什么?我不确定我是否理解与此参数相关的官方文档:
key - 代表该项目的稳定且唯一的密钥工厂。使用
列表中的多个项目不允许使用相同的键。类型
密钥应该可以通过 Android 上的 Bundle 保存。如果传递 null
列表中的位置将代表密钥。当您指定
key 滚动位置将根据 key 保持,其中
表示如果您在当前可见项目之前添加/删除项目
给定的密钥将保留为第一个可见的密钥。
我认为最好的答案是由官方文档 https://developer.android.com/jetpack/compose/lists#item-keys:
默认情况下,每个项目的状态是keyed反对位置列表中的项目的。但是,如果数据集发生更改,这可能会导致问题,因为更改位置的项目实际上会丢失任何记住的状态。如果你想象一下这样的场景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)
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)