【发布时间】:2022-01-07 09:56:34
【问题描述】:
为什么我的列表没有更新?我昨天花了一整天,调试和研究,但我找不到任何可以帮助我的东西。 我的片段中有一个伴生对象,最初是一个空的 mutableList:
class MainTillLayoutFragment : Fragment() {
companion object {
var mBasket = mutableListOf<Product?>()
}
...
}
我有一个名为 addToBasket 的方法。它获取“产品”项目作为参数并将其添加到 mBasket:
private fun addToBasket(product: Product) {
mBasket.add(product)
println("PRODUCTS ADDED NEW BASKET IS $mBasket")
}
然后我有一个可组合函数,它在 items() 函数中使用 mBasket 循环遍历每个产品并在lazyColumn 的每一行中显示一个文本:
LazyColumn(
modifier = Modifier
.background(color = Color.Red)
.fillMaxSize(),
content = {
items(mBasket) {
if (it != null) {
Text(text = it.name)
}
}
}
)
数据确实会更新,但是 UI 没有,上面的代码有什么问题我应该尝试一下吗?
提前谢谢大家:)
【问题讨论】:
-
您需要使用 Compose 自己的状态版本,例如
mutableStateOf....更新它将触发重组。 -
@JohnO'Reilly 是的,我刚刚找到了答案!我不得不使用 mutableStateListOf 我认为这就是你的意思,非常感谢你的帮助伙伴!
-
你也可以在这里使用
mutableStateOf,如果你感兴趣的数据已经是一个列表,这通常更合适,例如您可能有一个视图模型来公开它(可能是流程)......在这种情况下,您可能还会使用collectAsState之类的东西来转换为状态变量
标签: android kotlin android-jetpack-compose android-livedata