Android LiveData/StateFlow 列表项属性更新问题

2024-03-01

所以我正在更新我的RecylerView with StateFlow<List>像下面这样:

我的数据类:

data class Student(val name: String, var isSelected: Boolean)

我的视图模型逻辑:

fun updateStudentsOnSelectionChanged(targetStudent: Student) {
    val targetIndex = _students.value.indexOf(targetStudent)
    val isSelected = !targetStudent.isSelected

    _students.value[targetIndex].isSelected = isSelected        //<- doesn't work
} 

Problem:UI没变,只是isSelected inside _student变了,怎么回事? (和...一样LiveData)


我假设_students is a StateFlow<List>。改变isSelected的财产Student模型不会触发StateFlow。解决方法是使isSelected的财产Student数据类不可变,以便在设置新状态时对其进行比较,创建一个MutableList从当前列表中删除并复制现有的Student具有新值的对象isSelected财产:

data class Student(val name: String, val isSelected: Boolean)

val students = _students.value.toMutableList()
students[targetIndex] = students[targetIndex].copy(isSelected = isSelected)
_students.value = students
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android LiveData/StateFlow 列表项属性更新问题 的相关文章