带有 NavigationView 的嵌套导航图

Nested Navigation Graph With NavigationView in it

我的场景就像我有一个包含(login/signup 个片段)的 MainActivity。我有一个 HomeActivity(其中包含带抽屉布局的导航视图。)

并且这两项活动都有各自的 navigation_graph。当我在 main_navigation_graph 中包含 home_navigation_graph 并导航到它时,DrawerLayout 不起作用。但是当我单独执行它时,就像没有嵌套只调用 home_navigation_graph(HomeActivity) 作为启动器一样,一切正常。 这是我的示例代码:

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/nav_graph_login"
    app:startDestination="@id/loginFragment">

    <fragment
        android:id="@+id/loginFragment"
        android:name="com.example.app.ui.login.LoginFragment"
        android:label="LoginFragment"
        tools:layout="@layout/fragment_login">
        <action
            android:id="@+id/action_loginFragment_to_signupFragment"
            app:destination="@id/signupFragment" />
        <action
            android:id="@+id/action_loginFragment_to_mobile_navigation"
            app:destination="@id/mobile_navigation"
            app:launchSingleTop="true"
            app:popUpTo="@+id/nav_graph_login"
            app:popUpToInclusive="true" />
    </fragment>

    <fragment
        android:id="@+id/signupFragment"
        android:name="com.example.app.ui.signup.SignupFragment"
        android:label="SignupFragment"
        tools:layout="@layout/fragment_signup">
        <action
            android:id="@+id/action_signupFragment_to_loginFragment"
            app:destination="@id/loginFragment"
            app:launchSingleTop="true"
            app:popUpTo="@id/signupFragment"
            app:popUpToInclusive="true" />
    </fragment>

    <include app:graph="@navigation/mobile_navigation" />
</navigation>

当我在单击登录按钮时调用第二个移动导航图(使用代码 belwo)时,HomeActivity 打开但只有 homeDestinationFragment 是可见的,其余没有任何作用

findNavController().navigate(R.id.action_loginFragment_to_mobile_navigation)

下面的代码是 home_navigation_graph.xml

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mobile_navigation"
    app:startDestination="@+id/nav_home">

    <fragment
        android:id="@+id/nav_home"
        android:name="com.example.app.ui.home.HomeFragment"
        android:label="@string/menu_home"
        tools:layout="@layout/fragment_home" />

    <fragment
        android:id="@+id/nav_gallery"
        android:name="com.example.app.ui.earnings.VendorEarningFragment"
        android:label="@string/menu_vendor_earning"
        tools:layout="@layout/fragment_vendor_earning" />

    <fragment
        android:id="@+id/nav_slideshow"
        android:name="com.example.app.ui.slideshow.SlideshowFragment"
        android:label="@string/menu_slideshow"
        tools:layout="@layout/fragment_slideshow" />

    <fragment
        android:id="@+id/nav_tools"
        android:name="com.example.app.ui.tools.ToolsFragment"
        android:label="@string/menu_tools"
        tools:layout="@layout/fragment_tools" />

    <fragment
        android:id="@+id/nav_share"
        android:name="com.example.app.ui.share.ShareFragment"
        android:label="@string/menu_share"
        tools:layout="@layout/fragment_share" />

    <fragment
        android:id="@+id/nav_send"
        android:name="com.example.app.ui.send.SendFragment"
        android:label="@string/menu_send"
        tools:layout="@layout/fragment_send" />
</navigation>

请让我知道我缺少什么。我被困在这几个星期了。

在您的 home_navigation_graph 中只包含抽屉布局和导航菜单而不是整个图表。它对我来说效果很好,你可以查看我的 github 存储库。

替换下面的行

 <include app:graph="@navigation/mobile_navigation" />

使用下面的代码片段

<activity
    android:id="@+id/mainActivity"
    android:name="com.example.nav_experiment.MainActivity"
    android:label="activity_main"
    tools:layout="@layout/activity_main" />

在下面 Git link 有导航抽屉,点击登录按钮打开,根据查询要求

详细说明 关注 git Link -> https://github.com/gautammittal23/NaV_Graph_With_login_navigation_drawer

In MainActivity 其中包含(login/signup 个片段) 使用下面给出的代码:

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    frgmtloginbtn.setOnClickListener {
        findNavController().navigate(R.id.mainActivity)
    }
}

不要传递任何片段的 id 而不是传递主 activity 或 login/signup Activity

在您的 home_navigation_graph 中只包含抽屉布局和导航菜单而不是整个图表。它会正常工作

<include app:graph="@navigation/mobile_navigation" />

并替换为

<activity
android:id="@+id/mainActivity"
android:name="com.example.nav_experiment.MainActivity"
android:label="activity_main"
tools:layout="@layout/activity_main" />

我希望这对你有用,如果有任何其他查询让我知道很乐意帮助你