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 对象吗?
您可以使用mutableStateListOf
某些参数创建可变状态列表。
因此mutableStateListOf(DataProvider.listOfToDoEntries)
将创建一个可变的列表列表,这可能不是您想要的。
如果您想使用另一个列表中的项目初始化可变状态列表,您可以使用toMutableStateList
:
val todos = remember { DataProvider.listOfToDoEntries.toMutableStateList() }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3268 次 |
最近记录: |