如何在JetPack Compose BottomSheet状态更改上实现回调/侦听器机制?
类似的东西:
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_COLLAPSED && mIsCollapsedFromBackPress){
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
正如我们过去在Java/静态编程语言中所做的那样。
现在,我正在将其作为lambda传递给另一个需要关闭底片的可组合。
val closeSheet: () -> Unit = {
scope.launch {
modalState.hide()
}
}
但是我想得到一个回调,底部的工作表已经完全折叠,我可以继续我的任务。
我面临的实际问题:我正在通过按钮单击将可组合文件转换为位图。按钮在BottomSheet内部,需要转换的可组合文件在BottomSheet后面。因此,有时底表也会出现在位图中。我想仅在底表完全拼贴时触发该过程。
我在SO上找到了这个答案,但问题仍然是关于回调的。不知道如何使用它。
您可以使用 snapshotFlow,请参阅此处。它从可观察的快照状态创建流。下面是一个示例代码
// State change callback
LaunchedEffect(sheetState) {
snapshotFlow { sheetState.isVisible }.collect { isVisible ->
if (isVisible) {
// Sheet is visible
} else {
// Not visible
}
}
}
您也可以将此snapshotFlow用于其他事情,例如Pager页面更改回调
// Page change callback
LaunchedEffect(pagerState) {
snapshotFlow { pagerState.currentPage }.collect { page ->
when (page) {
0 -> // First page
1 -> // Second page
else -> // Other pages
}
}
}
今天早上在AndroidView遇到了一个奇怪的情况。 我有一个像这样的ProductCard界面 这个接口可以通过多个视图来实现。 呈现 列表的可组合体使用 获取视图,并在重新组合发生时传递状态更新。 在本示例中,与ProductCard视图的任何交互(调用)都不会更新屏幕。日志显示状态得到更新,但关键是每个按钮只更新一次。例如,我有一个收藏夹按钮。单击一次只会推送一次状态更新,任何后续的单击都
我在一个应用程序上使用jetpack comuse实现了登录、注册。我将登录用户重定向到主屏幕,并让新用户保持在登录屏幕上。但问题是当我将用户从登录屏幕重定向到主屏幕,用户按下返回按钮时,登录屏幕就会出现。现在我知道这是导航组件的正常行为,但我需要更改它。我如何做到这一点? 使用此行从登录屏幕导航到主屏幕
很可能是一个新手的问题,因为我对Android开发相当陌生——我在配置更改/导航时在我的@Composable中保存AndroidView的状态时遇到了麻烦,因为factory block被调用(如预期的那样)并且我的图表被重新实例化。 是一个具有复杂图表的第三方组件,我想保留缩放/滚动状态。我知道我可以使用ViewModel跨配置更改保存UI状态,但考虑到保存缩放/滚动状态的复杂性,我想问一下是
正如你所看到的,这就是我用MaterialBottomNavigation实现NavHost的方式,我在消息和提要屏幕上都有很多项目,当我在它们两个屏幕之间导航时,它们会自动重构,但我不想这样做,因为那里有很多数据,它在导航时闪烁和fps下降到10以下,我试图在NavHost之前初始化数据viewModels,但结果仍然相同, 有没有办法一次组成屏幕,并在viewModels数据更新时更新它们?
这是我的导航主机 我从主屏幕到“开始”屏幕很幼稚,但没有从“开始”导航到“计时器”屏幕,我已经传递了与从主屏幕获得的相同的ID。 这个主要可组合的 开始屏幕 当我点击按钮时,应用程序崩溃,错误如下
我需要使用jetpack compose来实现这三种状态的底部表单布局,如何通过最佳实践来实现? https://i.stack.imgur.com/86FXs.png