我需要检查某个LazyColumn
项目何时进入视图,一旦出现,onItemWithKeyViewed()
只回调一次以通知该项目已被查看。我的尝试:
@Composable
fun SpecialList(
someItems: List<Things>,
onItemWithKeyViewed: () -> Unit
) {
val lazyListState = rememberLazyListState()
if (lazyListState.isScrollInProgress) {
val isItemWithKeyInView = lazyListState.layoutInfo
.visibleItemsInfo
.any { it.key == "specialKey" }
if (isItemWithKeyInView) {
onItemWithKeyViewed()
}
}
LazyColumn(
state = lazyListState
) {
items(items = someItems) { itemData ->
ComposableOfItem(itemData)
}
item(key = "specialKey") {
SomeOtherComposable()
}
}
}
我的方法的问题是我注意到列表滚动性能严重下降并丢失帧。我意识到这可能是因为它正在检查每一帧上的所有可见项目键?
此外,onItemWithKeyViewed()
当前被多次调用,而不仅仅是第一次被查看。
onItemWithKeyViewed()
有没有一种更有效的方法可以只在第一次查看项目时进行单个回调"specialKey"
?