在非惰性列中使用项键 [英] Use item keys in non-lazy Column
本文介绍了在非惰性列中使用项键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
LazyColumn
Hasitem keys,以便将项的状态绑定到唯一标识符,而不是列表索引。有没有办法在这样的非惰性列表中使用项键?
Column {
for (item in list) {
Text(item)
}
}
我问这个问题是因为我想实现SwipeToDismiss
从列表中删除项,这只有在您将键传递给LazyColumn
(solution)时才起作用,但我的可丢弃项列表嵌套在LazyColumn
的LazyColumn
中,我不能将LazyColumn
嵌套在另一个LazyColumn
的itemContent块中(不允许在相同方向上进行嵌套滚动):
val items = listOf<String>(...)
val groups = items.groupBy { it.first() }
LazyColumn {
items(groups, { /* key */ }) { (firstChar, group) ->
// not allowed!
LazyColumn {
items(group, { /* key */ }) { item ->
Text(item)
}
}
}
}
我可以将items()
调用本身包装在for循环中,如下所示:
val items = listOf<String>(...)
val groups = items.groupBy { it.first() }
LazyColumn {
groups.forEach { (firstChar, group) ->
items(group, { /* key */ }) { item ->
Text(item)
}
}
}
但是,外循环的每个项中的状态都将针对其索引设置关键字。我还需要为组提供项键,以便在位置更改时保留它们的状态。
推荐答案
此操作的一般模式为
for (item in items) {
key(item) {
... // use item
}
}
key
Composable是特殊的,当item
的值在items
集合中移动时,Compose将使用item
作为键来检测状态何时应该移动。
这篇关于在非惰性列中使用项键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文