Jetpack Compose LazyColumn 项目在 StickyHeader 上滚动,但不会滚动到最后一项

2023-12-31

我正在努力使用 jetpack compose LazyColumn 和 StickyHeader 功能。基本上静态视图效果很好,但是一旦我开始滚动,这些项目就会越过粘性标题,滚动会开始一种奇怪的行为,并且最后一个项目将永远不可见,因为滚动总是反弹回来。

它看起来是这样的:

这是可组合的:

@OptIn(ExperimentalFoundationApi::class)
@Composable
fun CollectionsScreen(
    collectionsLive: LiveData<List<CollectionsView>>,
    onCollectionChanged: (ICalCollection) -> Unit
    /* some more hoisted functions left out for simplicity */
) {

    val list by collectionsLive.observeAsState(emptyList())
    val grouped = list.groupBy { it.accountName ?: it.accountType ?: "Account" }

    LazyColumn(
        modifier = Modifier.padding(8.dp)
    ) {

        item {
            Text(
                stringResource(id = R.string.collections_info),
                textAlign = TextAlign.Center,
                modifier = Modifier.padding(bottom = 16.dp)
            )
        }

        grouped.forEach { (account, collectionsInAccount) ->
            stickyHeader {
                Text(
                    account,
                    style = MaterialTheme.typography.titleLarge,
                    fontWeight = FontWeight.Bold,
                    modifier = Modifier.padding(
                        top = 16.dp,
                        start = 8.dp,
                        end = 16.dp,
                        bottom = 8.dp
                    )
                )
            }

            items(
                items = collectionsInAccount,
                key = { collection -> collection.collectionId }
            ) { collection ->

                CollectionCard(
                    collection = collection,
                    allCollections = list,
                    onCollectionChanged = onCollectionChanged,
                    /* some more hoisted functions left out for simplicity */
                    modifier = Modifier
                        .fillMaxWidth()
                        .padding(bottom = 8.dp)
                        .animateItemPlacement()
                        .combinedClickable(
                            //onClick = { onCollectionClicked(collection) }
                         )
                )
            }
        }
    }
}

我真的不确定是什么导致了这个问题,因为从文档中提供的示例来看,代码本身非常简单。只是CollectionCard本身的结构比较复杂。 我还尝试删除标题文本(第一项)并删除卡片的 Modifier.animateItemPlacement() ,但没有区别,问题保持不变...... 可组合项本身在片段内的组合视图中使用,但没有嵌套滚动。 您知道什么可能导致这种奇怪的行为吗?或者,在 LazyColumn 中使用具有粘性标题的卡片时,这可能是一个错误吗?

更新: 看起来这个问题与 StickyHeader 无关,但不知何故与 LazyColumn 有关。如果我用“item”替换“stickyHeader”,问题仍然存在......只有当我用列替换lazyColumn时它才会起作用。但我认为这个问题一定有解决方案......


一般来说,如果您使用 Material 或 Material3 主题,您可以将 StickyHeader 内容包装在Surface使用主题的标准(或自定义)着色方案自动使其不透明。Surface允许您将 StickyHeader 提升到表格其他内容之上。

stickyHeader {
    Surface(Modifier.fillParentMaxWidth()) {
        Text("Header")
    }
}

您可以根据自己的意愿自定义 Surface。

我会为弹跳问题创建另一个问题,它看起来像是一个单独的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jetpack Compose LazyColumn 项目在 StickyHeader 上滚动,但不会滚动到最后一项 的相关文章

随机推荐

  • 如何在MySQL中进行批量插入

    我有 1 多条记录需要输入到表中 在查询中执行此操作的最佳方法是什么 我应该创建一个循环并每次迭代插入一条记录吗 或者 还有更好的方法 来自MySQL手册 http dev mysql com doc refman 5 7 en inser
  • Azure 管理 REST API - “身份验证失败。‘授权’标头以无效格式提供。”

    我拼命尝试将 2 个经典存储帐户从旧的 MSDN 订阅移动到 MPN 订阅 但我一直遇到困难 因为仅通过 REST API 支持这些帐户的移动 我已按照此处的说明启用了 API https azure microsoft com en us
  • Eclipse 是否有排列类文件的功能?

    Eclipse 有很多功能 我想知道这个功能是否存在 或者是否存在任何捷径 我想将我的类数据排列到该流程中的变量 构造函数 方法中 从上到下 进一步细化我想按访问级别 pub private protected 和类型 void 或返回的方
  • 使用 GSON 获取 JSON 键名

    我有一个 JSON 数组 其中包含如下对象 bjones fname Betty lname Jones password ababab level manager 我的 User 类有一个用户名 需要使用 JSON 对象的密钥 我如何获取
  • 添加不属于模型一部分的自定义表单字段 (Django)

    我在管理网站上注册了一个模型 它的字段之一是长字符串表达式 我想将自定义表单字段添加到管理员中此模型的添加 更新页面 根据这些字段的值 我将构建长字符串表达式并将其保存在相关的模型字段中 我怎样才能做到这一点 我正在从符号构建数学或字符串表
  • 在elasticbeanstalk中设置NODE_ENV变量

    我创建了一个名为 elasticbeanstalk environment config其中包含以下内容 option settings option name NODE ENV value development 我还将 process
  • 具有多个可选参数的 Spring Data MongoDB AND/OR 查询

    我正在尝试执行具有两个以上可选参数的查询 但没有得到任何结果 对于2个参数我遵循了这个问题的答案spring data mongo 可选查询参数 https stackoverflow com questions 11613464 spri
  • 带有断路器的 Kafka Consumer,使用 Resilience4j 重试模式

    我需要一些帮助来了解如何使用 Spring boot Kafka Resilence4J 提出解决方案 以实现来自 Kafka Consumer 的微服务调用 假设如果微服务关闭 那么我需要使用断路器模式通知我的 Kafka 消费者停止获取
  • 使用 Solr 配置 Tika

    我正在寻找将丰富类型文档 Pdf Doc rtf txt 索引到 Solr 中 我找到了 Tika 作为解决方案 我在网上咆哮 但没有找到任何文档 链接来使其与 ExtractingRequestHandler 一起使用 任何人都可以提供通
  • 为什么对原型的编辑不起作用?

    我想向函数构造函数 类 的原型添加一个常量 但它返回为未定义 为什么 function myClass document ready function myClass prototype age 22 window alert myClas
  • 当在 QTableWidget 中拖动一行时,如何找出它被拖动的行索引 FROM 和 TO?

    我试图保持一些数组数据与 QTableWidget 的内容同步 我想启用拖放重新排序 在表中移动项目 而不是复制 但我不清楚当触发放置事件时 我如何找出该项目是从哪个索引拖动的 因此 我无法知道要在正在同步的列表中移动哪个对象 如何获取被拖
  • Android sqlite更新行

    我试图更新表中的一行 但更新功能似乎没有响应 我的功能一切正常 还是我哪里出了问题 public int editChild int id String name String dob int gender double weight do
  • 缩小的 js 文件中的变量名称重复

    我最近在产品部署中遇到了问题 这是一个 net 项目 问题是我的一个 js 文件中有一行代码 for const work in worklist 部署后 该js文件被缩小 代码更改为 for n in n 我通过将 const 更改为 v
  • 为什么我无法在 Solaris 10 上构建加载 Socket.so 的 Perl 模块?

    我正在尝试构建 Convert ASN1 模块 但在此过程中出现错误 我在 Solaris 10 上使用 Perl 5 12 0 perl Makefile PL运行没有问题 同样的make 但是 进行测试 会引发此错误 IMO 中最关键的
  • Primeng 按钮不显示标签

    我的 angular4 应用程序中有 primeng 按钮 按钮的标签未显示 按钮显示很小 没有标签 div div
  • 仅使用 WebRTC 发送报价

    我想创建类似聊天轮盘赌的东西 有两个同龄人 两个对等方都向信令服务器发送 SDP Offer 要求其与某人建立连接 信令服务器使用对等点 A 的提议将其作为答复发送给对等点 B 反之亦然 两个对等方都可以在不使用 createAnswer
  • jQuery、ajax 和 jsonp 的问题

    我正在使用 jsonp 和 ajax 访问另一台服务器上的 Web 服务 这是 jQuery ajax type GET url wsurl callback dataType jsonp crossDomain true error fu
  • 一个类全部都是静态方法有什么问题吗?

    我正在进行代码审查 发现一个使用所有静态方法的类 入口方法接受多个参数 然后开始调用其他静态方法 传递入口方法接收到的全部或部分参数 它不像具有很大程度上不相关的实用函数的数学类 在我自己的正常编程中 我很少编写 Resharper 弹出并
  • iText 横向方向和定位?

    我刚刚开始使用 iText 5 4 2 最新版本 有两件事我还没有搞清楚 创建横向文档 所有页面均以纵向呈现 在给定位置插入图像 距顶部和左侧的毫米数 我有下面的代码 Document d new Document PageSize A4
  • Jetpack Compose LazyColumn 项目在 StickyHeader 上滚动,但不会滚动到最后一项

    我正在努力使用 jetpack compose LazyColumn 和 StickyHeader 功能 基本上静态视图效果很好 但是一旦我开始滚动 这些项目就会越过粘性标题 滚动会开始一种奇怪的行为 并且最后一个项目将永远不可见 因为滚动