[英]Composable not recomposing when list is cleared in jetpack compose
我有一个MutableStateFlow
,它是一种emptyList
。 当我添加项目时,我的视图会毫无问题地重新组合。 现在我想在列表清晰时重新组合视图。 我尝试了一些代码但没有任何反应。
配对视图模型
class PairViewModel : BaseViewModel() {
val scanLowEnergyDevices by lazy { MutableStateFlow(emptyList<ScanResult>()) }
fun addDevices(result: ScanResult) {
scanLowEnergyDevices.value += result
}
}
内容有状态
@Composable
fun ContentStateful(
context: Context = LocalContext.current,
viewModel: BloodPressurePairViewModel = getViewModel()
) {
val activity = context as ComponentActivity
val scanDeviceList by viewModel.scanLowEnergyDevices.collectAsStateWithLifecycle()
ContentStateLess(
scanDeviceList = scanDeviceList,
resetAction = {
viewModel.scanLowEnergyDevices.value.toMutableList().clear()
}
)
}
ContentStateLess
@Composable
fun ContentStateLess(
scanDeviceList: List<ScanResult>,
resetAction: () -> Unit,
) {
AnimatedVisibility(visible = scanDeviceList.isNotEmpty()) {
Text(text = "scanDeviceList ${scanDeviceList.size}")
Button(onClick = { resetAction() }) {
Text(text = "Reset")
}
}
}
这里有什么问题? 谢谢
尝试像这样使用SnapshotStateList
val scanLowEnergyDevices by lazy { mutableStateListOf<ScanResult>() }
添加这样的项目
fun addDevices(result: ScanResult) {
scanLowEnergyDevices.add(result)
// scanLowEnergyDevices.value.add(result)
}
并像处理这样的标准集合一样清除列表
resetAction = {
viewModel.scanLowEnergyDevices.clear()
// viewModel.scanLowEnergyDevices.value.clear()
}
或者在您的用例中,因为它包含在 State 中,所以只需在.add()
和.clear()
调用之前调用.value
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.