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

Mat*_*ert 1 android android-jetpack-navigation

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

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

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

“SpecificFragment.kt”扩展“BaseFragment.kt”

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

这个应该怎么写?

Key*_*öze 7

您希望实施的是一项全球行动

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

<?xml version="1.0" encoding="utf-8"?>
<navigation 
    android:id="@+id/navigationGraph"
    ...>

  ...

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

</navigation>
Run Code Online (Sandbox Code Playgroud)

在您的基本片段中使用它:

findNavController().navigate(NavigationGraphDirections.moveToSpecificFragment())
Run Code Online (Sandbox Code Playgroud)

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

  • 哇,这真的隐藏在 Android Studio 的文档/UI 中(或者我只是真的瞎了)。我想现在是时候删除我已经实现的所有硬连线通用对话框了,尽管我显然不必这样做......感谢您指出! (2认同)