等同于 adapter.notifydatasetchange 或 Jetpack Compose Lazy 中的 Diffutils Column/Row

Equivalent to adapter.notifydatasetchange or Diffutils in Jetpack Compose Lazy Column/Row

如何在 Jetpack Compose 中更新、删除或添加 LazyColumn 中的项目?
这很容易通过 adapter.notifydatasetchangediffutils 在 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 将为您处理剩下的事情