我在这样的viewModel中设置kotlin可变地图,
// In ViewModel
var mapData= mutableMapOf<Int, String>()
在我的片段中,我指的是以下地图,
//In fragment
lateinit var _mapData: MutableMap<Int, String>
// in oncreate View
_mapData[1] = "one"
当我运行以上代码时,这_mapData
会自动更新为我的viewModel mapData
。我不要
我遇到真正问题的地方是以下代码,
// initiallizing
if(!_mapData.contains(2)){
_mapData[2] = _mapData[1]
}
//doing some process to get the actual _mapData[2]
_mapData[2] = "Two"
运行上述代码后,我_mapData[1]
也将更改为"Two"
。
这是什么行为,为什么会发生
不知道如何_mapData
从中分配mapData
,但是如果您只写:
_mapData = viewModel.mapData
然后两个变量都将引用存储到相同的精确地图对象。因此,如果您通过mapData
引用更改了任何_mapData
内容,则内容也会更改(因为它是同一对象)。
如果要在viewModel和fragment中具有单独的map实体,则应复制map:
_mapData = viewModel.mapData.toMutableMap()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句