我使用了一个lazycolumn来显示一个照片列表。照片与其路径一起显示。尝试删除图像时出现问题。我在每个图像上都有一个按钮,当单击它时,它的路径将从photoList中删除。但是当我点击删除按钮时,照片列表被修改了,但是UI没有改变。如果此时滚动该行,应用程序将崩溃并显示错误消息“IndexOutOfBoundsException”。我想那是由于排不重组的缘故。是什么原因。我该如何修复?
Composable which call photoList
val photoList MutableList
onDeleteClick = { path ->
photoList.remove(path)
}
Photo row compsoable
LazyRow(
modifier = Modifier
.padding(vertical = 16.dp)
.wrapContentHeight()
.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(16.dp),
state = rememberLazyListState(),
contentPadding = PaddingValues(horizontal = 16.dp)
) {
items(photoList) { path ->
ImageCard(path) {
onDeleteClick(path)
}
ImageCard
IconButton(
onClick = { onDeleteClick(path) },
modifier = Modifier.align(Alignment.TopEnd)
) {
Icon(
imageVector = Icons.Default.Delete,
contentDescription = "Delete",
tint = Color.White
)
}
2条答案
按热度按时间jmp7cifd1#
问题可能是你的
photoList
没有被 Package 在一个会在更改时触发Composite重新组合的状态中:)下面是一个示例代码,我将
photoList
Package 在remember
结构中。这不是完全相同的代码,因为你没有真正提供完整的代码,所以我不得不即兴发挥,但希望,你会明白这一点:)3phpmpom2#
在LazyColumn/LazyRow中,您必须在项目中添加唯一键,基于唯一键,只有特定项目才能得到更新。