1

我希望你们一切都好。

我对导航图有疑问。您可以在下图中看到结构;

在此处输入图像描述 所以我们有2个不同的导航图;navigation_Anavigation_B

我需要导航到嵌套图中的片段,该片段Fragment Y是.Fragment Znavigation_B

问题是;

  • 如果我用<include>for navigation_B,我就不能用 as NavHost
  • 如果我使用不同的导航图并将其添加为上面的嵌套图,我不能将导航目的地用于Fragment Yor Fragment Z

我需要使用navigation_Bas NavHost,还需要能够导航到Fragment Yand Fragment Z。我怎样才能做到这一点?

谢谢!

4

2 回答 2

2

您的导航图结构打破了推荐的导航模式!

但是为了您的需要,我有一种解决方法。

方法一:首先,FragmentY和FragmentZ需要有自己的deeplink。

    <fragment
      android:id="@+id/fragY"
      android:name=".FragmentY"
      tools:layout="@layout/frag_y>
      <deepLink
        android:id="@+id/"
        app:uri="any-app://internal_navigation_frag_y" />
    </fragment>

    <fragment
      android:id="@+id/fragZ"
      android:name=".FragmentZ"
      tools:layout="@layout/frag_z>
      <deepLink
        android:id="@+id/dlink_frag_z"
        app:uri="any-app://internal_navigation_frag_z" />
    </fragment>

然后,在位于 navigation_b 的 Fragment 中。我们称它为 FragmentB

// navigate to FramgmentY
val deeplinkY = Uri.parse("any-app://internal_navigation_frag_y")
findNavController().navigate(deeplinkY)

// navigate to FramgmentZ
val deeplinkZ = Uri.parse("any-app://internal_navigation_frag_z")
findNavController().navigate(deeplinkZ)

您可以将字符串存储在 string.xml 文件中any-app://internal_navigation_frag_yany-app://internal_navigation_frag_z

看看这个:https ://developer.android.com/guide/navigation/navigation-navigate#uri

方法2:在嵌套图navigation_B内部,定义2个全局动作,分别指向fragmentY和fragmentZ。由于navigation_B是一个NavHost,所以它会知道FragmentY和FragmnentZ

检查这个:https ://developer.android.com/guide/navigation/navigation-global-action

于 2020-03-05T08:32:46.017 回答
0

当您使用嵌套导航图时,内部图不应该知道外部图的任何信息。在这种情况下,graph_B 不应该知道 FragmentY 或 FragmentZ 的存在。您应该做的是从您的 graph_B 向启动它的人提供结果。然后在那时决定是去 FragmentY 还是 FragmentZ。

于 2020-03-02T15:03:53.280 回答