小编wal*_*eko的帖子

将 RememberSaveable 与 mutableStateListOf 结合使用

我正在尝试将可分割对象的可变列表添加到我的可组合项中。我还希望能够向其中添加对象和从中删除对象。

目前我正在使用这样的东西:

val names = remember { mutableStateListOf<String>() }

names.add("Bill")
names.remove("Bill")
Run Code Online (Sandbox Code Playgroud)

现在我希望这个列表在配置更改后继续存在,因此使用rememberSaveable. 也许是这样的:

val names = rememberSaveable { mutableStateListOf<String>() }

names.add("Bill")
names.remove("Bill")
Run Code Online (Sandbox Code Playgroud)

但这不起作用,它会抛出以下异常:

androidx.compose.runtime.snapshots.SnapshotStateList 无法使用当前的 SaveableStateRegistry 进行保存。默认实现仅支持可以存储在 Bundle 内的类型。请考虑为此类实现自定义 Saver 并将其传递给 RememberSaveable()。

这意味着SnapshotStateList( 的结果mutableStateListOf)不可保存。

到目前为止,我能想到几种解决这个问题的方法:

  1. 实际上实现了一个保护程序SnapshotStateList
  2. 使用类似的东西val namesState = rememberSaveable { mutableStateOf(listOf<String>()) }。这确实可以完美地工作,但是更新列表需要设置值,这既慢又不方便(例如,namesState.value = namesState.value + "Joe"仅添加单个元素)。

对于看似很小的任务来说,这两种方法似乎都太复杂了。我想知道做我想做的事的最好方法是什么。谢谢。

android android-jetpack-compose

24
推荐指数
1
解决办法
2万
查看次数

标签 统计

android ×1

android-jetpack-compose ×1