首页 > 解决方案 > Jetpack Compose 不会使用 RxAndroid 更新我的列表

问题描述

我正在尝试使用 RxAndroid Flowable 的订阅者更新 LazyColumn 项目。我用于图像列表的状态变量简称为“列表”

这是我的 LazyColumn 代码:

LazyColumn(
    modifier = Modifier
        .fillMaxWidth()
        .fillMaxHeight()
) {
    items(list) { image ->
        Text(text = image.title ?: "Title")
    }
}

例如,如果我运行这个测试协程,列表会更新并显示正确数量的测试图像:

GlobalContext.run {
            val testList = SnapshotStateList<Image>()
            for (i in 1..100) {
                testList.add(Image(i, null, null, null, null))
            }
            list = testList
        }

但是,如果我使用订阅 Flowable 尝试相同的方法,它会更新变量值,但不会触发重组。这是我的代码:

val observer = remember {
    disposable.add(
        viewModel.imagesObservable().subscribe(
            { images ->
                val snapList = SnapshotStateList<Image>()
                images.forEach {
                    snapList.add(Image(it.id, it.albumId, it.title, it.url, it.thumbnailUrl))
                }
                list = snapList
            },
            { Log.d("dasal", "Error: Can't load images") }
        )
    )
}

如何使用 Composable 处理 Flowable?

标签: androidkotlinandroid-jetpack-compose

解决方案


解决它。我正在使用这个声明

var list = remember { mutableStateListOf<Image>() }

我把它改成了这个

val list = remember { mutableStateOf(listOf<Image>()) }

现在我可以使用该list.value属性来更新/读取当前值。


推荐阅读