android - 在 android Jetpack compose 中使用列表处理状态

标签 android kotlin android-jetpack-compose

我正在尝试更新保留为可组合 View 状态的列表,但即使列表的值发生更改,可组合 View 也不会重新组合。

var list = remember {mutableStateOf(getListOfItems())}
ItemListView({ selectedItem ->
       list.value =  updateList(selectedItem, list.value)
            }, list.value)

private fun updateList(selectedItem: String,
         itemsList: List<Product>): List<Product> {
    for (item in itemsList){
        // selected item in the view is updated
        item.selected = item.name == selectedItem
    }
    return itemsList
}

知道为什么可组合项没有更新吗?我注意到使用列表作为状态时会出现问题。

最佳答案

您需要更新 MutableStatevalue(在您的示例中是一个 List),以触发重组而不是您设置的值的任何属性到MutableState

@Stable
interface MutableState<T> : State<T> {
    override var value: T
    operator fun component1(): T
    operator fun component2(): (T) -> Unit
}

但是还有另一个名为 mutableStateListOf() 的函数,当您添加或删除项目或使用新实例更新现有项目时,它可以触发重组。

val list =remember {
    mutableStateListOf< Product>().apply {
        addAll(getListOfItems())
    }
}

关于android - 在 android Jetpack compose 中使用列表处理状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73118699/

相关文章:

java - Google PubSub 异步速率限制无法按预期工作

android - 撰写中的自动完成 TextView

java - 代码块在 Android Studio 中无法运行,但在 Eclipse 中运行良好?

android - 对于 MapFragment 类型未定义 GetMap()

android - Kotlin Flow 和 Websockets 在 Android 上具有干净的架构

android - Jetpack 使用 fragment 组合 NavHost

android - OutlinedTextField jetpack 在键盘后面组成

android - 抽屉导航 : Gmail vs AppCompatv7 v21

java - 如何在 Javascript 接口(interface)中将 Javascript 函数作为参数传递?

android - 如何在 Kotlin 中设置一个带有复合可绘制对象的 TextView,它是一个 URL 图像,加载了 Glide?