【发布时间】:2023-02-05 22:53:25
【问题描述】:
我有一个 LazyColumn,其中有些项目您只能删除列表中的第一项(索引 0)。
LazyColumn 看起来像这样:
LazyColumn {
itemsIndexed(items, key = { _, item -> item.id }) { index, item ->
val dismissState = rememberDismissState(DismissValue.Default) { dismissValue ->
if (index != 0 && dismissValue == DismissValue.DismissedToEnd) {
someOtherStuff()
false
} else true
}
if (dismissState.isDismissed(DismissDirection.StartToEnd)) {
delete(item)
}
MyItem(dismissState)
}
}
delete() 的操作相当无关紧要,您只需要知道它从房间数据库表中删除了列表项,ViewModel 会观察到这一点,从而使 items 缩小一个元素。
但是,问题是 rememberDismissState 中的 index(和 lastIndex)与 itemsIndexed 的实际索引不是最新的。如果我删除 3 个项目列表中的第一个项目,我将无法在两个项目的结果列表中再次删除第一个项目,因为新的第一个项目的索引仍然是 1(或者 @ 987654330@认为)。
我知道这很可能与列表更改时未重新计算的 rememberDismissState 有关,那么我该怎么做呢?解决方法是在将列表放入 itemsIndexed 之前将列表映射到索引,但是有什么方法可以使上面的代码“正常工作”吗?
【问题讨论】:
标签: android kotlin android-jetpack-compose kotlin-flow android-jetpack-compose-list