[英]Jetpack Compose - LazyColumnFor not recomposing when item added
我正在尝试在 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。 我究竟做错了什么?
Jetpack compose 始终需要修改 state object 才能进行重组。 您需要使用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 {
LazyColumnFor(items = messages) { chatMessage ->
LatestMessageItem(chatMessage) {
// onclick
}
}
}
Box(alignment = Alignment.Center) {
Button(onClick = {
latestMessages.add(
ChatMessage(
"testId",
"testText2",
"testFromId2",
"testToId",
"timestamp",
0
)
)
}) {
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.