嵌套了导航图的导航图

时间:2019-11-22 11:37:50

标签: java android kotlin android-jetpack android-jetpack-navigation

我遇到的情况就像我有一个包含(登录/注册片段)的MainActivity。而且我有一个HomeActivity(其中包含带有抽屉布局的Navigationview。)

和两个活动都具有各自的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>

请让我知道我所缺少的。我在这个问题上坚持了几个星期。

2 个答案:

答案 0 :(得分:3)

在MainActivity中,其中包含(登录/注册片段) 使用下面给出的代码:

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

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

不要传递任何片段的ID,而应传递主要活动或登录/注册活动

在您的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" />

如果有其他查询让我知道很高兴为您提供帮助,

答案 1 :(得分:2)

在您的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链接下面有导航抽屉,该导航抽屉会在登录按钮单击时打开,根据查询的要求

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