android-fragments Android导航图,嵌套图问题

m4pnthwp  于 2022-11-13  发布在  Android
关注(0)|答案(2)|浏览(196)

我希望你们都过得很好。
我有一个关于导航图的问题。你可以在下面的图像中看到结构;
x1c 0d1x我们有两个不同的导航图; navigation_Anavigation_B中的一个或多个。
我需要从嵌套图(navigation_B)中的片段导航到Fragment YFragment Z
问题是;

  • 如果我将<include>用于navigation_B,则不能将其用作NavHost
  • 如果我使用不同的导航图,并将其添加为如上所述的嵌套图,我不能将导航目标用于Fragment YFragment Z

我需要使用navigation_B作为NavHost,我还需要能够导航到Fragment YFragment Z。我如何才能实现这一点?
谢谢你,谢谢你

js81xvg6

js81xvg61#

您的导航图结构破坏了建议的导航模式!
但为了你的需要,我有个变通的办法。
方法1:首先,FragmentY和FragmentZ需要有自己的深层链接。

<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中的一个片段内,我们将其命名为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)

不过,您可以将字符串any-app://internal_navigation_frag_yany-app://internal_navigation_frag_z存储在string.xml文件中。
看看这个:https://developer.android.com/guide/navigation/navigation-navigate#uri
方法2:在嵌套图navigation_B中,定义2个指向fragmentY和fragmentZ的全局操作。
请检查:https://developer.android.com/guide/navigation/navigation-global-action

nfeuvbwi

nfeuvbwi2#

当你使用嵌套导航图时,内部图不应该知道外部图的任何信息。在这种情况下,graph_B不应该知道FragmentY或FragmentZ的存在。你应该做的是把graph_B的结果传递给启动它的人。然后在这个时候决定是去FragmentY还是去FragmentZ。

相关问题