【问题标题】:Is it possible to have a fragment as popup through navigation component是否可以通过导航组件将片段作为弹出窗口
【发布时间】:2019-08-23 13:34:23
【问题描述】:

我想按下 recyclerView(片段 a,主)中的一个项目,通过导航打开另一个片段(片段 b,细节)。该片段(片段 b)有一个以屏幕为中心的约束布局(包含有关所述项目的信息),不占用窗口中的所有空间。片段 b(constraintLayout 和 frameLayout)中的背景设置为 background:transparent,不起作用。我想在背景中看到片段 a(最好可能通过轻微的模糊),使片段 b 成为弹出窗口。

我可以通过片段 a 中的新视图(布局)在片段“a”中创建弹出窗口。但重要的是在其他文件中隔离弹出窗口。我不希望片段 b 中的代码弄乱片段 a 中的代码。片段 a 有处理 recyclerView 的代码,片段 b 也有。 我想我看不到片段“a”的原因是片段b没有放在片段“a”的顶部。相反,它在视图中被替换。

在 iOS 中,可以设置类似的 Navigation 并指定您想要的是放置在“源”视图顶部的目标视图(将视图添加到视图堆栈的顶部,而不是替换它)。 android中的一些配置可以解决我的问题吗?

考虑到“动作”,我已经尝试了 Android Studio 中的一些配置,但它看起来不像我正在寻找的东西,至少我无法产生预期的结果。

val actionMinDetail = MinFragmentDirections.actionToMinDetailFragment(id)
        Navigation.findNavController(view).navigate(actionMinDetail)

【问题讨论】:

标签: android kotlin popup fragment


【解决方案1】:

所以,经过反复试验,我最终找到了解决方案。

@Zack Bvy: 我确实尝试过 DialogFragment 但我无法将它用作弹出窗口。新的 DialogFragment 刚刚占据了整个屏幕。就像我认为它是显示新片段的导航方式是罪魁祸首。 Navigation 会切换出您所在的视图并将其替换为目标视图,这就是 Navigation 的工作原理。

我确实尝试过使用 supportFragmentManager,但 android studio 不希望这样。 当您在活动中时,您可以使用 supportFragmentManager,但不能在片段中使用。在片段中时,您已经使用 childFragmentManager。这样就成功了,新片段的行为就像一个弹出窗口。

    val fm = childFragmentManager
    val someDetailDialogFragment = SomeDetailDialogFragment()

    // and some arg transfer
    val args = Bundle()
    args.putString("id", id)
    someDetailDialogFragment.arguments = args
    someDetailDialogFragment.show(fm, "Fragment_tag")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2019-03-09
    相关资源
    最近更新 更多