所以,我有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 重组。我哪里做错了?
我是 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)