Android 导航组件 - 从 "anywhere"/base 片段导航?

Android Navigation Component - navigate from "anywhere"/base fragment?

我正在开发一个应用程序,它有一个古怪的装置,可以在设备旋转时打开特定的片段。在实施 android 的导航组件之前,所需要的只是对当前 activity 的引用,并且可以在特定时刻向用户显示的任何内容之上执行手动片段事务。

但是在移动到导航组件之后,我发现很难实现像上面示例或(例如)如何从基本片段显示简单对话框的通用内容 class。

有没有行之有效的方法来编写这种逻辑?

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

BaseFragment.kt 可以承载所有通用逻辑以启动片段。通用片段逻辑仍然存在于 BaseFragment 中,但是 BaseFragment(抽象 class)不在导航图中(也不应该是(?)。因此,我不能调用“BaseFragmentDirections.actionXXXX() " 来自任何片段。

这个应该怎么写?

您要实现的是 global action

在您的导航图中创建一个全局操作。像这样:

<?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())

注意:全局操作的方向class将对应于导航图的id