等同于 adapter.notifydatasetchange 或 Jetpack Compose Lazy 中的 Diffutils Column/Row
Equivalent to adapter.notifydatasetchange or Diffutils in Jetpack Compose Lazy Column/Row
如何在 Jetpack Compose 中更新、删除或添加 LazyColumn
中的项目?
这很容易通过 adapter.notifydatasetchange
或 diffutils
在 recyclerview
中实现
只需对要传递给 items
函数的集合执行此操作即可。就这么简单。如果您的 class 稳定(只需使用 data class
)就可以了,它会正常工作。欢迎使用 Compose 魔法。
如果您想在 update/delete/add 上获得最佳性能,请在 items
函数中公开一个稳定的密钥,详情请参阅此处:https://developer.android.com/jetpack/compose/lists#item-keys
示例:
@Composable
fun MessageList(messages: List<Message>) {
LazyColumn {
items(
items = messages,
key = { message ->
// Return a stable + unique key for the item
message.id
}
) { message ->
// Display entry here
MessageRow(message)
}
}
}
在这里,如果您提供密钥 lambda,撰写程序将知道该条目是同一条目 - 只是内容不同。如果您不提供此 lambda - 列表中的索引将用作键。因此,除列表末尾之外的任何添加都会触发大量重组。所以它或多或少像一个 diff utils。您只需要提供这个,因为内容相等性是由隐式组合处理的 - 通过 Message
对象的 equals
。
因此,如果您想从列表中删除一条消息 - 将其删除并将新列表传递给 MessageList
。 Compose 将为您处理剩下的事情
如何在 Jetpack Compose 中更新、删除或添加 LazyColumn
中的项目?
这很容易通过 adapter.notifydatasetchange
或 diffutils
在 recyclerview
只需对要传递给 items
函数的集合执行此操作即可。就这么简单。如果您的 class 稳定(只需使用 data class
)就可以了,它会正常工作。欢迎使用 Compose 魔法。
如果您想在 update/delete/add 上获得最佳性能,请在 items
函数中公开一个稳定的密钥,详情请参阅此处:https://developer.android.com/jetpack/compose/lists#item-keys
示例:
@Composable
fun MessageList(messages: List<Message>) {
LazyColumn {
items(
items = messages,
key = { message ->
// Return a stable + unique key for the item
message.id
}
) { message ->
// Display entry here
MessageRow(message)
}
}
}
在这里,如果您提供密钥 lambda,撰写程序将知道该条目是同一条目 - 只是内容不同。如果您不提供此 lambda - 列表中的索引将用作键。因此,除列表末尾之外的任何添加都会触发大量重组。所以它或多或少像一个 diff utils。您只需要提供这个,因为内容相等性是由隐式组合处理的 - 通过 Message
对象的 equals
。
因此,如果您想从列表中删除一条消息 - 将其删除并将新列表传递给 MessageList
。 Compose 将为您处理剩下的事情