Jetpack Compose:LazyColumn未使用MutableList更新



我试图使用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>现在引用了任务集合的新引用。

相关内容

  • 没有找到相关文章

最新更新