Android导航组件 - 如何从“任何地方”/基础片段导航?

11

我正在开发一个应用程序,其中有一个怪异的小把戏,可以在设备旋转时打开特定的片段。在实现安卓导航组件之前,只需要引用当前活动的参考,并且可以在用户此时所显示的任何内容之上执行手动片段事务。

但是在切换到导航组件后,我发现很难实现像上面的例子或(例如)从基础片段类显示简单对话框等通用的东西。

是否有一种经过验证的方法来编写这种逻辑?

"SpecificFragment.kt" 扩展了 "BaseFragment.kt"

BaseFragment.kt 可以托管启动片段的所有通用逻辑。通用片段逻辑仍然存在于 BaseFragment 中,但 BaseFragment(抽象类)不在导航图中(也不应该在其中)。因此,我无法从任何片段调用 "BaseFragmentDirections.actionXXXX()"。

应该如何编写代码?


如果我理解正确的话,您想通过NavigationComponent从任何片段导航到特定片段,是吗? - Taslim Oseni
1个回答

19
你想要实现的是一个全局操作
在你的导航图中创建一个全局操作。就像这样:
<?xml version="1.0" encoding="utf-8"?>
<navigation 
    android:id="@+id/navigationGraph"
    ...>

  ...

  <action android:id="@+id/moveToSpecificFragment"
          app:destination="@id/specificFragment"/>

</navigation>

在你的基础片段中使用它:

findNavController().navigate(NavigationGraphDirections.moveToSpecificFragment())

注意:你全局操作的 Directions 类将对应于你导航图的 id。


2
哇,这个在Android Studio的文档/用户界面中真的很难找到(或者我只是太瞎了)。我想现在是时候移除我实现的所有硬编码通用对话框了,尽管显然我不必这样做...感谢您指出这一点! - Halvtysk
1
Stackoverflow总是比developer.android.com更好的文档。 - Serdar Samancıoğlu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接