相关疑难解决方法(0)

Android Jetpack Compose mutableStateListOf 不进行重组

所以,我有mutableStateListOf一个viewModel

var childTravellersList = mutableStateListOf<TravellersDetails>()
Run Code Online (Sandbox Code Playgroud)

TravellersDetails是一个数据类,有一个名为 的字段error

childTravellersList在 UI 中使用为:

val list = remember{viewModel.childTravellersList}

LazyColumn(state = lazyColumnState) {
    itemsIndexed(list) { index, item ->
        SomeBox(show = if(item.error) true else false)
    }
  }
Run Code Online (Sandbox Code Playgroud)

我在给定的TravellersDetailsviewModel更新中编写了一个函数:errorindexchildTravellersList

fun update(index){
    childTravellersList[index].error = true
}
Run Code Online (Sandbox Code Playgroud)

因此,每当我调用此函数时,列表都应该更新。

这会更新列表,但不会触发 UI 重组。我哪里做错了?

android kotlin android-jetpack android-jetpack-compose

29
推荐指数
1
解决办法
3万
查看次数

如何重构简单的 LazyColumn 列表示例

我是 Jetpack Compose 的新手,我正在尝试弄清楚当用户单击 FloatingActionButton 时如何重新组合 LazyColumn 列表。

如图所示,我有一个基本的脚手架布局,其中包含一个用于内容的 LazyColumn。底部是一个 FloatingActionButton。我希望能够单击该 FloatingActionButton,将“Molly”添加到我的姓名列表中,让应用程序重新组合我的列表,并显示包括 Molly 在内的完整列表。代码如下图。

在此输入图像描述


这是我的代码:

package com.learning.lazylistexample

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import com.learning.lazylistexample.ui.theme.LazyListExampleTheme
import kotlinx.coroutines.launch

data class ListItem(val name: String)

private var listItems: MutableList<ListItem> = mutableListOf(
    ListItem("Al"),
    ListItem("Barb"),
    ListItem("Cheryl"),
    ListItem("Dave"),
    ListItem("Ed"),
    ListItem("Frank"),
    ListItem("Gloria"),
    ListItem("Henry"),
    ListItem("Ingrid"),
    ListItem("Jack"),
    ListItem("Kayla"),
    ListItem("Larry")
)

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent { …
Run Code Online (Sandbox Code Playgroud)

android-jetpack-compose lazycolumn

3
推荐指数
1
解决办法
2777
查看次数