问题标签 [android-jetpack-compose-list]
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.
android - 为什么有时我需要在列表中使用 key()?
我有一个带有一些可变状态列表的组件。我将其中的一个项目以及删除该项目的回调传递给另一个组件。
组件在修饰符中调用delete
回调。clickable
这工作正常。但是当我clickable
为我自己的修改器更改时,pointerInput()
就会出现问题。
如果我单击第一项,它将删除它。接下来,如果我单击最新的顶部项目,则会调用现在已删除的第一项的旧回调,尽管旧组件已被删除。
我不知道为什么会这样。但我可以修复它。我使用key()
:
key()
那么,当我使用自己的修饰符时,为什么需要?jetpack的这段代码也是这种情况,我不知道为什么。
正如接受的答案所说,Compose 不会重新计算我的自定义修饰符,因为pointerEvent()
没有唯一键。
和
修复它,我不需要key()
在外部组件中使用。但是,我仍然不确定为什么我不需要向 发送唯一密钥clickable {}
。
android - Jetpack Compose - 在文本字段中捕获关键事件
我想在列表中的待办事项列表中创建一个文本字段when the user presses backspace on an empty text field , it removes itself
,如您所见,操作非常简单!
Jetpack Compose ,如果关键事件是可编辑的,Core Text Field 不会将其关键事件传播给父可组合项/修饰符~~写在他们的代码中
所以我尝试了这个,但它没有按预期工作
我只是想知道如何实现它,因为 CoreTextField 是内部的,我无法在文本字段中捕获关键事件
android - 有没有办法对齐 LazyColumn 底部的项目?
我正在尝试实现一个底部带有按钮的列表,如下所示:
由于我不知道列表中有多少项目,我使用的是LazyColumn
. 底部的按钮,只有在列表没有填满整个屏幕时才应该放在那里,如果是,按钮应该向下移动并成为列表中的最后一项。
像这样移动里面的按钮LazyColumn
:
给出以下内容:
我试图在两者之间添加一个Spacer
withfillMaxHeight()
修饰符作为一个项目,但它没有改变。
我还尝试在列中添加 theLazyColumn
和Button
inside:
但这只会将按钮锚定在底部,就好像它Column
是一个LinearLayout
.
考虑到这一点,是否可以对齐LazyColumn
's 项目之一,使其始终位于底部?或者,添加某种填充可用区域的空间?
android - 如何在jetpack compose中使用BottomBar实现底部表
所以我想要实现的是:
- 一个承载 BottomNav 栏的家庭组合(此处使用脚手架)
- 底部导航栏附有 3 个其他可组合项
- 3 个可组合项中的每一个都有自己的惰性列
- 3 个惰性列中的每个项目都有一个菜单图标,单击该图标会打开底部工作表
借助此处的答案,我可以通过将脚手架封闭在 ModalBottonSheetLayout 中来实现上述目的:Jetpack Compose Scaffold + Modal Bottom Sheet
问题:
- 底部工作表的目的是显示一个菜单项,单击该菜单项应从lazyColumn中删除该项目
- 所以底部工作表需要知道被点击删除它的项目的详细信息
我怎样才能做到这一点?主可组合项没有任何有关其托管的可组合项中存在的惰性列中的项目的信息。
有没有不同的方法来解决这个问题?
这是我的代码:
HomeComposable.kt
MessageItemsComposable.kt
android - Jetpack Compose:解释一下为什么列表内容没有更新?
我知道在 Jetpack Compose 中,您必须更改传入数据的状态才能触发 UI 的重新组合,以使用任何更改来更新 UI。我还在这里阅读了有关 Jetpack Compose 状态和 ViewModels 的文档。但这是一个非常简单的示例,并没有涵盖下面的用例。
下面是一个概念场景,我想通过仅更新一个项目的状态来更新列表的状态,该状态我希望反映在 Jetpack Compose 渲染部分中。我知道我必须分配一个新列表作为数据,这应该会触发重组,下面我正在使用toMutableList()
它来尝试实现这一点。但这不起作用。当我运行这种代码时,不会发生重组,并且列表中不会更新单个项目的状态。
有人可以向我解释为什么这不起作用以及我应该如何解决这个问题?
我已经知道了mutableStateListOf()
,但是如果我想让我的视图模型与我的应用程序的其他非 Jetpack Compose 部分兼容,我应该如何处理这个问题,因此我只想在我的视图模型中使用 LiveData?
android - Jetpack Compose Vertical Grid 单项跨度大小
在 xml 中,您可以在 GridLayoutManager 中使用 GridLayoutManager.SpanSizeLookup 设置单个项目的跨度大小(该项目将在行中使用多少列,例如,在 3 列的网格中,我可以将第一项设置为跨度大小3 所以它将使用网格的所有宽度),但是在 Compose 中我找不到这样做的方法,垂直网格只有一种设置全局跨度计数和添加项目的方法,但没有设置跨度大小一个单独的项目,有没有办法做到这一点?
android - 一起滚动两个懒惰的滚动条
这个问题以前有人问过,但形式不同,关于一些具体的用例,至今没有答案。我终于让它工作了,所以我在这里分享这个,但这不应该被标记为重复,因为前面的所有问题都指定了特定的东西,比如Columns
with scrollable
Modifiers
, or LazyRows
,但这通常会解决所有问题,我的意思是所有懒惰的滚动器,希望甚至是一般的可滚动容器。我会发布答案,所以这只是我希望与社区分享的一个知识,当然,欢迎任何改进。
android - Jetpack Compose - 具有最大宽度的项目的 HorizontalPager 项目间距/填充
使用 Jetpack Compose 和伴奏寻呼机,我正在尝试创建一个HorizontalPager
where:
- 显示当前项目左侧和右侧的项目边缘
Pager
物品有一个最大宽度
例如,我编写了以下代码(为了简单起见,我制作了Text
物品,但实际上,我实际上制作了更复杂的Card
物品):
我遇到的问题是,当我使项目的最大宽度似乎小于屏幕宽度(请参阅 参考资料MyPager_200dpWidth
)时,我再也看不到侧面的项目了。另一方面,使用最大宽度(见)或(见)较大的项目可以让我看到侧面的项目。MyPager_500dpWidth
fillMaxWidth
MyPager_FillMaxWidth
在我看来,最大宽度较小的项目实际上比最大宽度较大的项目占用了更多的水平空间。这可以显示在预览部分...
看看左边的图像 ( MyPager_500dpWidth) and middle (
MyPager_FillMaxWidth ) show the next item, while the image on the right (
MyPager_200dpWidth`) 是如何占据整个屏幕的?这是将鼠标悬停在项目上以查看骨架框时的另一个比较...
只是想知道是否有人可以帮助我弄清楚如何解决这个用例。Compose中是否有可能存在错误?