问题标签 [lazycolumn]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
698 浏览

android - LazyColumn 比垂直滚动的 Column 慢

我有要在列表中显示的产品单元格,我使用了 LazyColumn 但性能很糟糕,我找不到它为什么这么慢。然后我将 LazyColumn 切换到 Column 并且突然滚动非常流畅

LazyColumn 版本:

列版本

CartItemWithActions 是我的产品单元格,其中包含我正在使用 glide 和几个文本加载的图像

LazyColumn 版本的 HWUI

柱的 HWUI

谁能提供提示为什么 LazyColumn 比 Column 慢?

更新

以这种方式设置 LazyColumn 时,似乎 LazyColumn 滚动效果更好

0 投票
0 回答
34 浏览

android - 使用 mutableStateOf(mutableMapOf) 更新 LazyColumn 的正确方法()) 来自 ViewModel 的变量

我有一个 LazyColumn ,每个项目都是一个键值对。在我的 ViewModel 中,我维护这样的地图:

在我的 Activity 中,我使用了 FloatingActionButton 的 Scaffold 和具有 SwipeToDelete 可组合的 LazyColumn。我的用例是每当我单击 fab 时,应该会打开一个对话框,并且用户应该在对话框的文本字段中输入键和值。一旦用户按下对话框的“保存”按钮,这些键值对应该在我的 LazyColumn 中更新。在“保存”按钮上单击我调用以下视图模型方法:

从活动中,我直接将 传递_pairMap给可组合对象,如下所示:

现在,当我使用此流程添加任何内容并在对话框中按“保存”时,UI 上没有任何反应。但是当我再次按下 fab 并出现对话框时,我可以在后台看到数据现在作为新条目添加到 LazyColumn 中。

我也面临另一个问题。向左滑动后,该项目仍为红色。预期的行为是该项目应该再次可见,只有 Key 存在而没有 Value。

我的 SwipeToDelete() 看起来像这样:

需要帮助我如何解决这个问题。以下视频中也显示了步骤: https ://drive.google.com/file/d/1Vj8wMMn4kzZS8LzuqD1jAXi0VweXce7​​n/view?usp=sharing

0 投票
2 回答
101 浏览

memory-management - LazyColumn 项目从列表中删除后保留在内存中

我发现我的应用程序使用了异常大量的内存。有一个LazyColumn数据定期更新的地方。我发现,在这些更新之后,内存中的列表项实例的数量会随着时间的推移而增加,并且会变得明显大于列表中的最大项目数量。
我做了一个小样本来说明这里的问题。

这些是数据项:

LazyColumn 看起来像这样。

在这个示例中,我设置了两部分数据,LazyColumn之后,我清理了它。

我希望没有在内存中引用的项目示例(在探查器中可见),但不幸的是,最后一组数据仍在内存中,从 Compose 的某处引用。
在包含项目LazyRows和图像的真实应用程序中,此类多次更新会导致内存阻塞,并可能导致 OOM。
项目类是不可变的 ( @Immutable),并且所有项目都有唯一的 id。对于这种行为的原因以及是否可以更改的任何想法,我将不胜感激。

0 投票
1 回答
186 浏览

kotlin - android jetpack compose 中带有 ConstraintLayout 的 LazyColumn

我将在每列的顶部放置一个标签,LazyСolumn在底部放置一个标签。如下。

在此处输入图像描述

然而,当我填写它时,出现了与我预期不同的屏幕:

在此处输入图像描述

还有什么我需要设置的吗?这是我的代码

0 投票
1 回答
588 浏览

android-jetpack-compose - 更改实时数据时,Android Composelazycolumn 不更新

我有一个项目列表,每个项目都有一个复选框。复选框的状态需要存储在 中viewmodel,最好将 中的列表viewmodel作为唯一的事实来源。

我试图item.selected通过更新回调中的列表(MutableLiveData<List<Object>>in viewmodel)来更新onCheckedChange,但 UI 没有更新。如果我向下滚动然后向上滚动 UI 更新并且复选框似乎被选中。为什么不更新?

0 投票
0 回答
73 浏览

kotlin - 具有嵌套 LazyRows 的 LazyColumn - 内存问题

在我的应用程序中有一个LazyColumn包含嵌套的LazyRows. 我有一个内存问题 - 当网格中有 30-40 行和每行大约 10-20 个元素时,只需垂直向上和向下滚动列表大约 20 次,就有可能达到内存不足 (OOM)。一个项目是一个Card带有一些Boxes和文本。似乎每个项目的结果可组合都被存储了,即使项目没有组合。

这是一个演示这一点的示例。它显示了一个由 600 个元素组成的简单网格(它们只是Text),并且在我的模拟器上使用了大约 200 MB 的内存。(我使用带有横向的 Android TV 模拟器,一次可见 120 个元素)。

MainActivity.kt

TestDataBlock.kt

TestDataItem.kt

0 投票
1 回答
211 浏览

android - Jetpack Compose 如何为 LazyColumn 懒惰地获取音乐文件及其元数据

我正在尝试使用 Jetpack Compose 编写音乐播放器应用程序。我有一个如下所示的 MusicCardModel

当我启动应用程序时,我正在使用以下功能的 MediaStore 扫描所有音乐文件

显示该列表的这些代码部分

有2个问题。第一个是创建这个列表,专辑艺术花费了太多时间,并且等待很长时间才能在屏幕上显示该列表。没有专辑封面它非常快,但我想展示专辑封面。如何延迟加载音乐文件的元数据?第二个问题是将所有这些列表数据加载到内存中,当我切换到另一个应用程序并且应用程序停止时,会出现 TransactionTooLargeException。我该如何解决这些问题?

0 投票
1 回答
52 浏览

android-jetpack-compose - 在 LazyColumn 中将单个 AnimatedVisibility 设置为 true

我有一个用于操作系统信息的可组合功能,它在单击时展开详细信息并在再次单击时恢复。

我创建了一个列表并通过LazyColumn

虽然它按预期工作,但我想这样做,如果打开一张卡并选择另一张卡,之前打开的卡将被关闭。

这是我试图避免的,有人可以给我一个提示吗?

我试图避免的

0 投票
1 回答
371 浏览

android - 如何在 LazyColumn 和 Column 中禁用滚动

我想在我的 LazyColumn 或 Column 中禁用滚动。

Modifier.scrollable(state = rememberScrollState(), enabled = false,orientation = Orientation.Vertical)

或者

修饰符.verticalScroll(...)

不工作。

这是我的代码:

0 投票
0 回答
21 浏览

android - 固定底部工作表

你好! 我的 bottomSheet 包括 RecyclerView(Compose LazyColumn)。所以当我想向上滚动时,我的底部工作表会尝试关闭,而不是滚动我的列表。我如何固定bottomSheetDialogFragment,如果我使用compose,我不能使用nestedScrollview 和recycler。这是我的示例代码

以及我如何调用它

我想通常在底页内滚动我的列表,而不关闭我的底页。