【问题标题】:Infinite recomposition on LazyColumn items in Jetpack ComposeJetpack Compose 中 LazyColumn 项目的无限重组
【发布时间】: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


【解决方案1】:

原来,当我改变

modifier = Modifier.fillParentMaxWidth()

modifier = Modifier.fillMaxWidth()

对于可组合布局中的某些BoxesLazyColumn 中的无限重组停止。

编辑:在进行修复时,我遇到了一些 Gradle 依赖项缓存问题。无论如何,当问题第二次出现时 - 解决方案是...升级 compose.foundation 依赖项:

implementation "androidx.compose.foundation:foundation:$1.2.0-alpha07"

不确定哪一个有帮助。

【讨论】:

    猜你喜欢
    • 2021-06-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2022-09-26
    • 2022-07-29
    • 2021-12-28
    相关资源
    最近更新 更多