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

导航架构组件-对话框片段

史劲
2023-03-14

是否可以将新的导航架构组件与DialogFragment一起使用?我必须创建自定义导航器吗?

我很乐意将它们与导航图中的新功能结合使用。

共有3个答案

钱承允
2023-03-14

是的,您可以通过调用getParentFragment(),从对话框片段访问父片段的视图。getView()。并使用视图进行导航。

这里有个例子

Navigation.findNavController(getParentFragment().getView()).navigate(R.id.nextfragment);
袁亦
2023-03-14

否,从1.0.0-alpha01版本开始,不支持将对话框作为导航图的一部分。您只需继续使用show()来显示对话框片段

庾奇思
2023-03-14

2019年5月更新:

DialogFragment现在完全受支持,从导航2.1.0开始,您可以在这里和这里阅读更多内容

航海的老办法

我以这种方式进行:

1) 将Navigation库至少更新到2.1.0-alpha01版本,并在项目中复制此修改要点的两个文件。

2)然后在您的导航主机片段中,将name参数更改为您自定义的NavHostFraank

<fragment
    android:id="@+id/nav_host_fragment"
    android:name="com.example.app.navigation.MyNavHostFragment"
    app:defaultNavHost="true"
    app:navGraph="@navigation/nav_graph"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/toolbar" />

3) 创建对话框片段子类,并将它们添加到导航图中。xml带有:

<dialog
    android:id="@+id/my_dialog"
    android:name="com.example.ui.MyDialogFragment"
    tools:layout="@layout/my_dialog" />

4) 现在从碎片或活动中使用

findNavController().navigate(R.id.my_dialog)

或者类似的方法。

 类似资料:
  • 我正在我的应用程序中尝试导航架构组件。早些时候,我使用片段事务来实现以下功能。基本上,我想从导航。 碎片- 如果我正在使用导航组件并尝试 然后结果是FragmentA被FragmentB替换并且背景片段不可见。 我想知道一个解决方案,如果导航架构组件允许的话。 附言:我听说过嵌套导航主机,但从内部使用它好吗。 更新: FragmentB将有进一步交易的行动,例如: 碎片- 当用户按下后退按钮时,片

  • 我一直在遵循导航架构组件中的文档,以了解这个新的导航系统是如何工作的。 要从一个屏幕到另一个屏幕进行/返回,您需要一个实现接口的组件。 NavHost是一个空视图,当用户在应用程序中导航时,目的地会随之交换。 但是,似乎目前只有片段实现了< code>NavHost 导航架构组件的默认NavHost实现是NavHostFragment。 所以,我的问题是: > < li> 即使我有一个可以用< c

  • 我使用childFragmentManager在片段内显示一个对话框,或者使用supportFragmentManager在活动内显示一个对话框,在这个过程中,我想设置目标片段,如下所示: 但在运行该代码时,我得到了一个错误: java.lang.非法状态异常:片段文本搜索对话片段{b7fce67#0 0}声明不属于此FragmentManager的目标片段PlaceSearch片段{f87414

  • 在尝试导航组件之前,我曾手动执行片段事务,并使用片段标记获取当前片段。 现在在我的主要活动布局中,我有这样的东西: 如何通过导航组件检索当前显示的片段?做 返回一个,我想检索我显示的'MyFraank'。 非常感谢。

  • 我不知道如何使用新的导航架构组件,从我的主屏幕(带有连接到底部应用程序栏的浮动操作按钮)导航到没有应用程序栏的另一个屏幕。 当我点击晶圆厂时,我想要我的下一个屏幕(片段?)从右侧滑入。问题是我应该把我的

  • null 在调用之前和之后,我尝试了,但都不起作用(这是有意义的:在它没有要弹出的内容之前;在它只关闭刚刚添加的片段之后)。这是否意味着唯一的方法是重写来拦截它,并确保在这些情况下不会被调用? 谢了!