android - 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?
解决方案
解决它。我正在使用这个声明
var list = remember { mutableStateListOf<Image>() }
我把它改成了这个
val list = remember { mutableStateOf(listOf<Image>()) }
现在我可以使用该list.value
属性来更新/读取当前值。
推荐阅读
- python - 执行以下代码时显示“str”对象不可调用错误
- python - 按钮命令问题 tkinter
- .net - 尝试使用 VB.NET 获取 Discord 频道列表
- javascript - 迭代和打印没有初始键和多个条目的 JSON
- visual-studio-code - 如何删除命令行错误:无效的宏定义:Visual Studio Code (VSCode) 中的 __STDCPP_DEFAULT_NEW_ALIGNMENT__=16
- python - 如何传递函数(外部编写)并分配给 pandas python 中的列?
- java - 在 java 中的 jlabel[] 中设置颜色值
- scala - 在执行场景之前发送数据
- asp.net-mvc - .Net MVC - HostingEnvironment.QueueBackgroundWorkItem 的后台进程实现
- c++ - boost如何在windows上为interprocess_mutex生成一个唯一的名字