【发布时间】:2022-10-04 20:25:40
【问题描述】:
我有简单的LazyColumn:
LazyColumn {
val lazySportEvents: LazyPagingItems<RecyclerItem> = stateValue.pagingItems.collectAsLazyPagingItems()
lazySportEvents.apply {
when (loadState.refresh) {
is LoadState.NotLoading -> {
itemsIndexed(
lazyPagingItems = lazySportEvents,
itemContent = { index, item ->
when (item) {
is SportEvent -> Text(item.name)
is AdItem -> AndroidView(
factory = { context ->
AdImageView(context).apply{
loadAdImage(item.id)
}
}
)
}
}
)
}
}
}
}
当我向下滚动屏幕时,一切正常。但是当我向上滚动时,我最终会调用fun loadAdImage()。这意味着 AdItem 的重组发生了,即使那是与向下滚动屏幕之前完全相同的项目(值和参考)!为什么重组甚至会发生呢?我想省略它,以免每次滚动时都加载相同的广告图片。
甚至可以跳过延迟分页项的重组吗?
编辑:我意识到项目的重组是无限的,这导致了上述行为。
【问题讨论】:
-
这是惰性列的预期行为,它重用先前列的引用并在每次出现在屏幕上时设置新项目。
标签: android android-jetpack-compose compose-recomposition