Kotlin jetpack 将元素删除和添加到 mutableStateListOf

kej*_*lor 4 android kotlin android-jetpack-compose

我编写了硬编码的 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 = "+")
    }
}
Run Code Online (Sandbox Code Playgroud)

}

@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")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

它工作得很好,但是当我想要实现操作,例如向列表添加新条目并通过更改删除它时

val todos = remember { mutableStateListOf(DataProvider.listOfToDoEntries) }
Run Code Online (Sandbox Code Playgroud)

我不再收到单个 ToDo 对象,而是整个列表。有什么想法如何接收该 mutableStateList 的每个 ToDo 对象吗?

Phi*_*hov 5

您可以使用mutableStateListOf某些参数创建可变状态列表。

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

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

val todos = remember { DataProvider.listOfToDoEntries.toMutableStateList() }
Run Code Online (Sandbox Code Playgroud)