我有一个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相关问答推荐

Android Jetpack Compose Material3主题配色方案

如何在安卓系统上使用Float16霓虹灯?

有人能帮我在应用程序上使用模拟位置时避免被发现吗?我已经反编译并粘贴了一个代码,S小文件

在Jetpack Compose中实现自动换行

由于Xcode运行脚本阶段没有指定输出,在IOS Emulator中的KMM项目中生成失败

判断 AAR 元数据时发现 Android 问题:androidx.core:core:1.12.0-alpha01 和 androidx.core:core-ktx:1.12.0-alpha01

获取 ArithmeticException:除以零,但我没有在任何地方除以零

如何在 Jetpack Compose 中设置行宽等于 TextField 的宽度?

LazyColumn 项目,隐式接收器无法在此上下文中调用单元

如何在 Compose 中使用合并的单元格创建网格视图?

清洁架构中的服务

如何在 Jetpack Compose 中为中心对齐设置动画?

如何将设备屏幕位置转换为发送事件位置?

更改 Android SDK 版本 33 后建议在 xml 布局文件中不起作用

更新后 Firebase 服务无法在模拟器上运行

复用 RecyclerView 适配器,避免不必要的 API 调用

Android Jetpack Compose - 找不到 R.drawable?

jetpack compose 中的可点击指示是什么?

如何在不使用 NestedScrollView 的情况下使用带有 CollapsingToolbar 的 ViewPager?

如何在 Android 上的 RecyclerViewAdapter 中使用 DiffUtils