Sam*_*hen 7 android kotlin android-livedata kotlin-flow kotlin-stateflow
所以我正在更新我的RecylerView内容StateFlow<List>如下:
我的数据类:
data class Student(val name: String, var isSelected: Boolean)
Run Code Online (Sandbox Code Playgroud)
我的视图模型逻辑:
fun updateStudentsOnSelectionChanged(targetStudent: Student) {
val targetIndex = _students.value.indexOf(targetStudent)
val isSelected = !targetStudent.isSelected
_students.value[targetIndex].isSelected = isSelected //<- doesn't work
}
Run Code Online (Sandbox Code Playgroud)
问题: UI没变,但isSelected内部_student变了,这是怎么回事?(和...一样LiveData)
我假设_students是一个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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3276 次 |
| 最近记录: |