是的,您可以通过调用getParentFragment(),从对话框片段访问父片段的视图。getView()
。并使用视图进行导航。
这里有个例子
Navigation.findNavController(getParentFragment().getView()).navigate(R.id.nextfragment);
否,从1.0.0-alpha01
版本开始,不支持将对话框作为导航图的一部分。您只需继续使用show()来显示对话框片段
。
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 在调用之前和之后,我尝试了,但都不起作用(这是有意义的:在它没有要弹出的内容之前;在它只关闭刚刚添加的片段之后)。这是否意味着唯一的方法是重写来拦截它,并确保在这些情况下不会被调用? 谢了!