【问题标题】:LazyColumn to not recompose some itemsLazyColumn 不重新组合某些项目
【发布时间】:2022-01-06 11:27:06
【问题描述】:

使用RecyclerView,我可以使一些ViewHolder 不可回收(按照以下一些答案 I want my RecyclerView to not recycle some items)。
我可以让LazyColumn 不重新组合某些项目(类似于让RecyclerView 不回收一些ViewHolder)吗?我在LazyColumn 有一些大图片的项目,它在向下和向上滚动后重新组合,所以滚动不流畅。

【问题讨论】:

  • 除非你做错了什么,否则它不会重组。查看this example,每个单元格出现时只记录一次,滚动期间不会发生重组(预计新出现的单元格)
  • @PhilipDukhov 我试过你的例子,但是在我滚动到底部然后向上滚动到顶部后它会重新组合。
  • 这是一个惰性列表,当单元格消失然后再次出现时,它肯定应该重新组合。虽然不在 then 屏幕上,但惰性视图已从视图树中删除,并且在再次出现时需要组合。
  • @PhilipDukhov 是的,我同意你的观点,但我的问题不同。 LazyColumn 解决与RecyclerView 相同的问题。您可以再次查看此链接stackoverflow.com/questions/36313079/…。在某些情况下,我们仍然希望 RecyclerView 中的某些项目不被回收(例如:该项目包含大图像、画布或视频)。 RecyclerView 支持这一点,我从 RecyclerView 迁移到 LazyColumn
  • 我现在明白了,没有注意到那个链接,我的错。据我所知,LazyColumn没有办法做到这一点,我建议你create a feature request

标签: android android-jetpack-compose lazycolumn


【解决方案1】:

我遇到了同样的问题,并使用 Column 来代替修饰符垂直滚动。如果您不希望它回收视图,只需加载所有(少数项目)

Column(
            modifier = Modifier
                .constrainAs(listView) {
                    top.linkTo(
                        parent.top
                    )
                }
                .fillMaxSize()
                .verticalScroll(rememberScrollState())
        ) {
            list.forEachIndexed { index, itemModel ->
               ItemView(itemModel, index) {
                    // on item click
                }
            }
            Spacer(modifier = Modifier.height(40.dp))
        }

【讨论】:

  • 使用Column 而不是LazyColumn 会有所帮助。不幸的是,我需要LazyColumn 来支持列表中的拖放项目,所以我不能使用Column
  • link你试过这个吗?
  • 是的,目前我正在使用这个库来支持拖放
猜你喜欢
  • 2022-12-15
  • 2021-10-13
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 2022-12-07
  • 2021-12-08
相关资源
最近更新 更多