我试图使用Jetpack Compose
在单击按钮时删除文本,但用户界面未更新。
我已经尝试设置了一个按钮,单击按钮,deletedTasks就会更新,如果我的任务位于deletedTasks中,那么它应该显示一个删除线。
这种变化只会手动发生,但我希望它是自动
我不知道该怎么办。这是我第一次尝试Jetpack Compose
,如有任何帮助,将不胜感激
@Composable
fun toDoItem(title: String, category: String, task: Task) {
val rememberTask = remember { mutableStateOf(deletedTasks) }
Surface(...) {
Column (...) {
Row {
Column (...) {
if (!deletedTasks.contains(task)){
Text(text = title, style = MaterialTheme.typography.h4.copy(
fontWeight = FontWeight.Bold
))
} else {
Text(text = title, style = MaterialTheme.typography.h4.copy(
fontWeight = FontWeight.Bold
), textDecoration = TextDecoration.LineThrough)
}
}
IconButton(onClick = {
rememberTask.value.add(task)
}) {
Icon(imageVector = Icons.Filled.Check, contentDescription = "Check")
}
}
}
}
}
@Composable
fun recyclerView(tasks: MutableList<Task>) {
LazyColumn (modifier = Modifier.padding(vertical = 10.dp, horizontal = 80.dp)) {
items(items = tasks) {task ->
toDoItem(task.title, task.category, task)
}
}
}
您使用的是MutableList<>
,不建议用于Jetpack Compose
中的任何集合用例。我建议把它改成SnapshotStateList
。
你的回收器视图可堆肥的看起来像这个
@Composable
fun recyclerView(tasks: SnapshotStateList<Task>) { ... }
而你设置东西的地方(例如ViewModel
(就像
tasks = mutableStateListOf<Task>( ... )
使用CCD_ 7将保证;"更新";或re-composition
,以及您对其进行的任何正常列表操作,如
list.add( <new task> )
list.remove( <selected task> )
list[index] = task.copy()
<-编辑列表的惯用方法
还有用于Map key~value
对用例的SnapshotStateMap
。
但是,如果你想知道如何用普通的List
更新LazyColumn
,你必须重新创建整个MutableList<Task>
,这样它就会通知作曲家已经进行了更新,因为MutableList<Task>
现在引用了任务集合的新引用。