簡體   English   中英

Jetpack Compose:LazyColumn 未使用 MutableList 更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM