我有一个MutableStateFlow,差不多是emptyList.当我添加项目时,我的视图被重新组合,没有任何问题.现在,当列表被清除时,我想重新组合视图.我try 了一些代码,但什么也没有发生.

PairViewModel

class PairViewModel : BaseViewModel() {
     val scanLowEnergyDevices by lazy { MutableStateFlow(emptyList<ScanResult>()) }

     fun addDevices(result: ScanResult) {
        scanLowEnergyDevices.value += result
    }
}

ContentStateful

@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

Android相关问答推荐

如何使用Jetpack Compose使水平pager 显示离屏页面?

Google Play测试应用程序Crash-java.lang.NoSuchFieldError:没有Lkotlinx/coroutines/CoroutineExceptionHandler类型的字段键

在卡片上创建圆角底部边框

如何在Jetpack Compose中更新异步回调的用户界面

空数据来自改装

如何在使用 PointerInput 修改器时添加点击时的波纹效果

使用 Jetpack Compose 在 Android TV 上启用系统声音

Jetpack Compose 中的用户在线指示器

可从 Play store 下载链接访问未发布的应用

为什么我收到这个错误我需要安装 android studio

Jetpack Compose:在屏幕外制作长水平图像的动画

如何让这个三角形指示器在 android jetpack compose 中旋转和移动?

为什么项目捕获对象给我在 Compose 中找不到参考

如何在 Jetpack Compose 中禁用 Horizo​​ntalPager 的分页动画

观察软键盘可见性,打开/关闭 Jetpack Compose

Int 传递给 Intent 但Android工作室说我传递了一个字符串

协程中的 Job.Cancel 与 Scope.Cancel 有什么区别?

android 13 版本是否会影响 android 12 目标应用程序

react-native-config 在发布版本中不起作用

升级到 android studio 花栗鼠后,应用程序未安装在模拟器中