Kotlin新来了!
我试图制作一个可以改变的Map,但这种改变也会触发重新组合。然而,我遇到了一个难题,似乎找不到一个绕过它的方法。
我明白使用这样的东西:
val someVar by remember {mutableStateOf(someMutableMap)}
是无用的,因为它试图查看对象的可变状态,而对象本身是可变的。我理解为什么这不起作用。但是,我似乎找不到使用mutableStateOf的方法(),因为如果使用普通Map,就无法添加键/值对,也无法更改值。因为这是不可变的意思。但是我需要能够添加和更改Map,因为我正在编写的应用程序的性质。
我试过了:
- 〉使用一个mutableStateOf(mutableMap),它会警告我在本身可变的东西上使用可变状态。
- 〉使用一个mutableStateOf(map),它确实会触发重组,但是,它也会阻止我添加或更改map,因为没有任何用于不可变对象的setter。这会导致构建map的函数(从文本文件,但每次都有一个令人头痛的问题)无法工作,沿着应用程序的其他基本内容,因为所有的重点都是让用户构建这个map。
我不期待一个银盘的答案,但一个小方向将不胜感激。我可以在这里张贴代码,如果它会有所帮助。
2条答案
按热度按时间i86rm4rw1#
对只读Map执行此操作的方法是创建新的只读Map。您可以使用加号和减号操作符来完成此操作。您可以使用
+=
和-=
以方便使用。这些操作将创建新的只读Map,并对原始Map进行指定的修改。文档中有更多详细信息。您也可以添加键对或Map列表来添加一组键。或者您也可以删除键列表。
cwxwcias2#
您可以使用
mutableStateMapOf
来获取SnapshotStateMap
,当您使用新示例添加、删除或更新现有项时,它会触发重新组合取样器
还有
List
变体SnapshotStateList
,mutableStateListOf
,它只为更新的项目触发重组。Jetpack Compose惰性列在单个项更新时重新组合所有项