我通过修改旧的mutableStateOf()
对象数据来修改它,但新数据没有反映在它上面。
变量:作为
val offTime = mutableStateOf<List<OffTime>>(emptyList())
更新代码
fun updateOffTime(newOffTime: OffTime, index: Int){
val updatedOffTime = offTime.value.mapIndexed { i, offTime ->
var result = offTime
if(index == i) result = newOffTime
result
}
offTime.value = updatedOffTime
Log.d(TAG, "updateOffTime: $updatedOffTime")
Log.d(TAG, "updateOffTime: ${offTime.value}")
}
Note:
当对象OffTime
没有id
时,即OffTime(fromTime, toTime)
:-工作
关闭时间(id,从时间,到时间):-不起作用
1条答案
按热度按时间jgwigjjp1#
我不知道您的具体用例,也不知道您的整个代码实现,但是如果我可以问一下,为什么您使用普通的
collection
list
,而不是SnapshotStateList
或其新示例的扩展mutableStateListOf
,当它是执行列表操作的一部分时?您是否尝试过将
offtime
转换为SnapshotStateList
?并执行更新?
SnapshotStateList
是在compose中为这样的use-cases
创建的,在compose中您可以执行普通的列表操作,如(添加、删除、更新或批更新),并保证re-composition
。你的电话
将触发整个重组,因为整个列表引用已经被改变,但是对于
SnapshotStateList
,对结构的任何改变都保证匹配特定的re-composition
,比如说,如果你修改索引7处的项,并且如果这被比如LazyColumn
观察到,则只有第7个索引LazyColumn's
将re-compose
另外,我不知道你的
Offtime
是data class
还是标准类,我建议它是data-class
,这样你就可以轻松地对它的某个示例进行copy()
,将一个新值传递给它的某个属性,并在SnapshotStateList
中重新赋值。