首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MutableStateFlow不使用MutableList

MutableStateFlow不使用MutableList
EN

Stack Overflow用户
提问于 2022-01-29 12:41:06
回答 3查看 1.3K关注 0票数 2

下面是我尝试使用的MutableStateFlow值:

代码语言:javascript
复制
val songList: MutableStateFlow<MutableList<Song>> = MutableStateFlow(arrayListOf())

我需要观察更改(在添加、removeAt等方法之后)在我上面的MutableList上,但无法实现。我的猜测是,由于只有列表的元素更改而不是列表本身,收集方法不会被触发。

如果可能的话,我如何使用StateFlow实现这一点?如果没有,正确的方法是什么?

注意,我需要arrayListOf()的初始值,所以LiveData对我来说可能不够。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-01-29 18:40:22

Notify LiveData observers when nested properties change

  • 有帮助的阅读

  • 什么问题:

代码语言:javascript
复制
- StateFlow and LiveData won't get notified if the nested field gets changed.
代码语言:javascript
复制
- Ex 1: Update specific item of a List (not add/remove).
代码语言:javascript
复制
- Ex 2: Update specifc property of an object.

解决方案:

  1. 创建助手扩展函数:

List.mapButReplace(targetItem: T,newItem: T) = map { if (it == targetItem) { newItem }== }

  1. 对操作作出反应(例如:单击事件):

val newStudent = student.copy(isSelected = !student.isSelected) viewModel.updateStudents(学生,newStudent)

  1. 句柄(ViewModel):

乐趣updateStudents(currentStudent:学生,newStudent:学生){ val newList = _students.value.mapButReplace(currentStudent,newStudent) _students.value = newList }

票数 1
EN

Stack Overflow用户

发布于 2022-11-18 16:47:01

在您看来,模型:

代码语言:javascript
复制
val songList: MutableStateFlow<MutableList<Song>> = MutableStateFlow(emptyList()) // modified

fun add(song: Song) {
    songList.update {
        songList.value.toMutableList().apply { this.add(song) }
    }
}

可合成的:

代码语言:javascript
复制
val songs = yourViewModel.songList.collectAsStateWithLifecycle()
票数 1
EN

Stack Overflow用户

发布于 2022-09-13 16:54:47

为了更新MutableListStateflow中,您必须根据下面这样的条件映射项目,这是我已经完成的,并且执行得很好。

代码语言:javascript
复制
 _userList.value = _userList.value.map {
                if (it?.userName == updatedUser.userName) updatedUser
                else it
            }

这里,MutableStateFlow @Sam的解释_userList对我的解决方案有很大帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70905480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档