【发布时间】:2022-11-07 17:18:47
【问题描述】:
我正在创建一个应用程序,除其他外,它使用户能够添加消费者,然后稍后将其删除。消费者显示在卡片中,最后带有删除按钮。
添加消费者工作正常。但是,当我尝试删除消费者时,在应用程序屏幕中删除的始终是最后一个.我知道这不是逻辑实现错误,因为我在items() 调用之前停止了调试器,并且在任何重组中,保存消费者的列表都删除了正确的消费者!下图显示了单击删除按钮后的结果“乙”卡(取出的卡是“C”!):
在重组发生之前查看调试器显示的内容:
相关代码如下。
ViewModel 和 Model(相关部分)定义:
class ConsumidoresViewModel : ViewModel() {
var lista = mutableStateListOf<Consumidor>()
fun add(consumidor: Consumidor){
lista += consumidor
}
fun remove(consumidor: Consumidor){
lista.remove(consumidor)
}
}
data class Consumidor(var nome: String)
...
主要可组合,直接从 .onCreate() 调用:
fun UsersView() {
var consumidores: ConsumidoresViewModel = viewModel()
...
LazyColumn() {
items(items = consumidores.lista) { consumidor ->
CardNome(consumidor, consumidores)
}
}
删除按钮的函数调用:
IconButton(onClick = { consumidorViewModel.remove(consumidor) }) { ... }
我无法弄清楚我做错了什么。我对 Android 编程/撰写相当陌生,但我已经编程了几十年(不是专业的)。有人可以指点我一个方向吗?它可能与我的 Sates / View Model 实现有关,但我不知道是什么,因为调试器上的 SnapshotStateList 清楚地表明了这一点“一个”和“C”存在的卡片,以及“乙”走了!
【问题讨论】:
-
您是否尝试过根据其独有的某些内容从列表中删除
Consumidor的实例?喜欢consumidor.Id?
标签: android-jetpack-compose lazycolumn compose-recomposition