我正在使用viewModel将数据传递到我的撰写视图。问题是我想通过在viewModel中的模型内部处理展开和折叠视图。因此,如果某些用户界面单击expand方法,我将这样调用viewModel和doExpand方法:
private val _acquiredCoupons = MutableLiveData<List<AcquiredCoupon>>(listOf())
val acquiredCoupons: LiveData<List<AcquiredCoupon>> = _acquiredCoupons
fun doExpand(coupon : AcquiredCoupon){
val index = _acquiredCoupons.value?.indexOf(coupon) ?: -1
val newItems = _acquiredCoupons.value?.toMutableList().also {
it?.get(index)?.isExpanded = true
}
_acquiredCoupons.value = newItems
Timber.i("Mahdi $index")
}
但是问题是在撰写UI中的更新模型不会触发并且重新撰写不会发生! 我正在观察这样的实时数据:
val items = viewModel.acquiredCoupons.observeAsState(initial = emptyList())
答案 0 :(得分:0)
在观察代码中,您需要使用observeAsState
,因此您的视图将与任何更改值的LiveData更新一起重组。
val items by viewModel.acquiredCoupons.observeAsState()
答案 1 :(得分:0)
问题很可能是您将原始值传递给了Composable
(请您在有机会的情况下,向问题中提供示例片段)。如果认为该值等于先前的值,则不会进行重新组合。
解决这个问题的一种方法是将State
对象本身传递给目标Composable
。
例如,如果您的设置如下:
@Composable
fun CouponBar(
coupons: List<Coupon>
) { ... }
然后尝试
@Composable
fun CouponBar(
coupons: State<List<Coupon>>
) { ... }