Kotlin jetpack撰写mutableStateListOf删除和添加元素



我编写了ToDo元素的硬编码列表,并制作了2个可组合的函数来显示数据。

@Composable
fun TodoAppContent() {
val todos = remember { (DataProvider.listOfToDoEntries) }
Column(
modifier = Modifier
.fillMaxSize()
.background(Color(0xff503d69))
) {
LazyColumn(
contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp),
modifier = Modifier
.weight(1f)
) {
items(items = todos, itemContent = { CreateToDoListItem(todo = it) })
}
Button(
onClick = {},
modifier = Modifier
.size(60.dp)
.align(alignment = Alignment.CenterHorizontally),
colors = ButtonDefaults.buttonColors(backgroundColor = Color(0xffc1b6d1)),
shape = CircleShape
) {
Text(text = "+")
}
}

}

@Composable
fun CreateToDoListItem(todo: ToDo) {
Card(
modifier = Modifier
.padding(horizontal = 8.dp, vertical = 8.dp)
.fillMaxWidth(),
elevation = 2.dp,
backgroundColor = Color(0xff694598),
shape = RoundedCornerShape(
topStart = 30.dp,
topEnd = 30.dp,
bottomStart = 0.dp,
bottomEnd = 30.dp
)
) {
Row {
Column(
modifier = Modifier
.padding(16.dp)
.fillMaxWidth()
.align(Alignment.CenterVertically)
) {
Text(text = todo.title, style = typography.h6)
Text(text = todo.description, style = typography.caption)
OutlinedButton(
onClick = {},
modifier = Modifier
.size(40.dp)
.align(alignment = Alignment.End),
colors = ButtonDefaults.buttonColors(backgroundColor = Color(0xffc1b6d1)),
shape = CircleShape
) {
Text(text = "X")
}
}
}
}

}

它工作得很好,但是当我想实现诸如添加新条目到列表并通过更改

删除它的操作时
val todos = remember { mutableStateListOf(DataProvider.listOfToDoEntries) }

我不再接收单个ToDo对象,而是整个列表。任何想法如何接收每个单一的ToDo对象的mutableStateList?

使用mutableStateListOf,您可以从一些参数创建一个可变状态列表。

所以mutableStateListOf(DataProvider.listOfToDoEntries)将创建一个可变列表的列表,这可能不是你想要的。

如果你想用另一个列表中的项初始化一个可变状态列表,你可以使用toMutableStateList:

val todos = remember { DataProvider.listOfToDoEntries.toMutableStateList() }

最新更新