Noa*_*oah 7 android-jetpack-compose
LazyColumn具有项目键,以便将项目的状态与唯一标识符而不是列表索引联系起来。有没有一种方法可以在像这样的非惰性列表中使用项目键?
Column {
for (item in list) {
Text(item)
}
}
Run Code Online (Sandbox Code Playgroud)
我问的原因是因为我想实现SwipeToDismiss从列表中删除项目,这只有在将密钥传递给LazyColumn(解决方案)时才有效,但是我的可忽略项目列表嵌套在 a 内部LazyColumn,并且我无法嵌套 aLazyColumn在 another 的 itemContent 块内部LazyColumn(不允许在同一方向布局中嵌套可滚动):
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)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以将调用items()本身包装在 for 循环中,如下所示:
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)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,每个外循环项目中的状态都将根据其索引进行键控。我还需要为组提供项目键,以便在位置更改时保留其状态。
chu*_*ckj 12
一般模式是,
for (item in items) {
key(item) {
... // use item
}
}
Run Code Online (Sandbox Code Playgroud)
可组合项key很特殊,当集合中的item值移动时,Compose 将用作检测状态何时应移动的键。itemitems
| 归档时间: |
|
| 查看次数: |
4723 次 |
| 最近记录: |