![](/img/trans.png)
[英]ViewModel with LiveData and MutableList not Updating in Jetpack Compose
[英]Jetpack Compose: LazyColumn not updating with MutableList
我正在嘗試使用Jetpack Compose
單擊按鈕刪除文本,但 UI未更新。
我試圖設置一個按鈕並單擊一個按鈕, deletedTasks得到更新,如果我的任務在deletedTasks中,那么它應該顯示一個刪除線。
此更改僅手動發生,但我希望它是自動的
我不確定如何與 go 聯系。 這是我第一次嘗試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
。
您的 recyclerView 可組合項看起來像這樣
@Composable
fun recyclerView(tasks: SnapshotStateList<Task>) { ... }
在你設置東西的地方(例如ViewModel
)就像
tasks = mutableStateListOf<Task>( ... )
使用SnapshotStateList
將保證“更新”或re-composition
您對它執行的任何正常列表操作,例如,
list.add( <new task> )
list.remove( <selected task> )
list[index] = task.copy()
<- 更新列表的慣用方式還有用於Map key~value
對用例的SnapshotStateMap
。
但是,如果您對如何使用普通List
更新LazyColumn
感到好奇,則必須重新創建整個MutableList<Task>
以便它會通知作曲家進行了更新,因為MutableList<Task>
現在引用任務集合的新引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.