当前位置: 首页 > 知识库问答 >
问题:

如何在BottomSheetDialogFraank中正确使用Jetpack Compose?

陶睿
2023-03-14

例如,我在应用程序中使用了带有Compose LazyColumn代码的MyBottomSheetDialogFragment:

class MyBottomSheetDialogFragment : BottomSheetDialogFragment() {
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        return ComposeView(requireContext()).apply {
            setContent {
                Column(horizontalAlignment = Alignment.CenterHorizontally) {
                    Text("Header", color = Color.Black)
                    LazyColumn(
                        Modifier
                            .weight(1f)
                            .fillMaxWidth()) {
                        items(100) {
                            Text("Item $it", Modifier.fillMaxWidth(), Color.Black)
                        }
                    }
                }
            }
        }
    }
}

并使用以下代码显示:

MyBottomSheetDialogFragment().show(activity.supportFragmentManager, null)

这就是我们所拥有的:

MyBottomSheetDialogFragment 屏幕图像.jpg

现在,如果向下滚动LazyCol列列表,则一切正常,但如果向上滚动LazyCol列列表,则底部工作表对话框滚动而不是LazyCol列列表。

如何在BottomSheetDialogFragment中正确实现LazyColumn?

当我们使用XML RecyclView列表时,为了解决这个问题,我们必须像这里描述的那样使用NestedScrollView包装RecyclView列表,但是如何使用Jetpack Compose修复它?

共有1个答案

刘凡
2023-03-14

您应该使用BottomSheetScaffold并将SheetContent与您的底部工作表内容一起设置。不要使用BottomSheetDialogFraank。

下面是一个底层脚手架的基本结构示例:

    val scaffoldState = rememberBottomSheetScaffoldState(
        bottomSheetState = rememberBottomSheetState(BottomSheetValue.Expanded)
    )

    BottomSheetScaffold(
        modifier = Modifier.navigationBarsPadding(),
        scaffoldState = scaffoldState,
        topBar = {
            // Your topBar
        },
        sheetShape = BottomSheetShape,
        sheetPeekHeight = MaterialTheme.spacing.large,
        sheetContent = {
            // Your sheet content
        }
    ) { innerPadding ->
      // You content
    }

 类似资料:
  • 问题内容: 从官方教程中: 在卸载和销毁组件之前立即调用。使用此方法执行任何必要的清除,例如使计时器无效,取消网络请求或清除在其中创建的所有DOM元素。 我了解“使计时器无效”。可以用终止。但是我不理解“清理在中创建的任何DOM元素”,我可以看到这种情况的示例吗? 问题答案: 如果网络请求发送库支持中止正在进行的网络请求调用,则绝对可以在方法中调用该请求。 但是,与清理元素有关。根据目前的经验,我

  • 问题内容: 我一直在尝试在Node.js中调用D3。我首先尝试使用脚本标签从D3的网站导入d3.v2.js D3的作者建议一个人应该“ npm install d3” …我做到了,我可以在节点控制台中成功调用它: 但是,当尝试使用“ node app.js”从app.js调用它时,我得到: 我意识到,D3的作者在其他地方已经明确规定了应该使用画布: https://github.com/mbost

  • 问题内容: 我读了这篇文章《如何真正地,真正地使用QThreads》。完整说明,它说而不是子类qthread和重新实现run(),应使用moveToThread(QThread *)使用moveToThread将QObject推送到QThread实例上 这是C ++示例,但我不知道如何将其转换为python代码。 我一直在使用这种方法来生成qthread,但是如您所见,它使用的是不推荐的方式。我如

  • 问题内容: 这是一个演示查询,请注意,这非常简单,仅在base_price为0的地方获取,并且仍然选择条件3: 是 在数据库上运行此命令时,我得到: 3 0 3 0 3 0 3 0 3 0 问题答案: 删除后立即: 有两种不同的形式,如手册中所述。在这里,您要使用第二种形式,因为您正在使用 搜索条件 。

  • 本文向大家介绍如何在MySQL中正确使用WITH ROLLUP?,包括了如何在MySQL中正确使用WITH ROLLUP?的使用技巧和注意事项,需要的朋友参考一下 使用WITH ROLLUP的语法如下- 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是在MySQL中正确使用WITH ROLLUP的查询- 这将产生以下输出-

  • 我试图在我的进程中使用节点模块(在本例中为),如下所示: 注意:功能在我按下