gpt4 book ai didi

android - Jetpack Compose - LazyColumnFor 在添加项目时不重新组合

转载 作者:行者123 更新时间:2023-12-04 11:30:14 26 4
gpt4 key购买 nike

我正在尝试在 Jetpack Compose 中创建一个项目列表,该列表会在基础数据更改时自动更新,但它不会更新,并且我无法在 LazyColumnFor 最初组成后将项目添加到它。

private var latestMessages = mutableListOf<ChatMessage>()

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return ComposeView(context = requireContext()).apply {
setContent {
LatestMessages(latestMessages)
}
}
}

@Composable
fun LatestMessages(messages: MutableList<ChatMessage>) {
Column {
LazyColumnFor(items = messages) { chatMessage ->
LatestMessageItem(chatMessage) {
// onclick
}
}
}
Box(alignment = Alignment.Center) {
Button(onClick = {
latestMessages.add(
ChatMessage(
"testId",
"testText2",
"testFromId2",
"testToId",
"timestamp",
0
)
)
}) {

}
}
}
Box中的按钮只是为了测试添加一个项目。据我了解,LazyColumnFor 应该在基础数据发生更改时更新,类似于 SwiftUI 中的 ForEach。我究竟做错了什么?

最佳答案

编辑 2022 年 3 月
Jetpack compose 不再使用 LazyColumnFor所以我更新了答案以反射(reflect)撰写的当前状态。
Jetpack compose 始终需要在进行重组之前修改状态对象。您需要使用 MutableStateList<T> .您可以传递对它的引用并以任何接受 SnapShotStateList<T> 的方法进行更新。

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {

return ComposeView(context = requireContext()).apply {
setContent {
val latestMessages = mutableStateListOf<ChatMessage>()
LatestMessages(latestMessages)
}
}
}

@Composable
fun LatestMessages(messages: SnapshotStateList<ChatMessage>) {
Column {
LazyColumn {
items(messages){ chatMessage ->
LatestMessageItem(chatMessage) {
// onclick
}
}
}
Box(alignment = Alignment.Center) {
Button(onClick = {
latestMessages.add(
ChatMessage(
"testId",
"testText2",
"testFromId2",
"testToId",
"timestamp",
0
)
)
}) {

}
}
}

关于android - Jetpack Compose - LazyColumnFor 在添加项目时不重新组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65039054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com