How to navigate from a sub graph to another sub graph?

3 days ago 4
ARTICLE AD BOX

I'm going to use this structure:

MainActivity (Single Activity) └── NavHostFragment (root_nav_graph) ├── (nav_graph)= │ ├── LoginFragment │ └── RegisterFragment └── (main_nav_graph) ├── MainTabsContainerFragment │ ├── HomeNavHost │ ├── DashboardNavHost │ ├── NotificationsNavHost

But after login success, I can display main_nav_graph correctly.

Here's root_nav_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/root_nav_graph" app:startDestination="@id/nav_graph"> <include app:graph="@navigation/nav_graph"/> <include app:graph="@navigation/main_nav_graph" /> </navigation>

nav_graph is loginFragment lives in.

Now I want to loginFragment to main_nav_graph's start destination. I have tried:

navigation from nav_graph, add action then navigate in LoginFragment:

nav_grah.xml:

<fragment android:id="@+id/loginFragment" android:name="xxx.LoginFragment" android:label="LoginFragment" app:launchSingleTop="true"> <action android:id="@+id/action_login_to_main" app:destination="@id/mainTabsContainerFragment" app:popUpTo="@id/nav_graph" app:popUpToInclusive="true" /> findNavController().navigate(R.id.action_login_to_main)

doesn't work.

Add action in root_nav_graph, and navigate in activity

root_nav_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/root_nav_graph" app:startDestination="@id/nav_graph"> <include app:graph="@navigation/nav_graph"/> <include app:graph="@navigation/main_nav_graph" /> <action android:id="@+id/action_auth_to_mainTabsContainer" app:destination="@id/main_nav_graph" /> </navigation>

and in activity

private lateinit var navController: NavController private fun setupNavigation() { val navHostFragment = supportFragmentManager .findFragmentById(R.id.nav_host_fragment) as NavHostFragment navController = navHostFragment.navController } fun onCreate() { setupNavigation() } fun onLoginSuccess() { navController.navigation(R.id.action_auth_to_mainTabsContainer) }

Replace

<include app:graph="@navigation/main_nav_graph"

by

<fragment android:id="@+id/mainTabsContainerFragment" android:name="com.atp.atplatform.feature.MainTabsContainerFragment" tools:layout="@layout/fragment_main_tabs_container" /> <action android:id="@+id/action_auth_to_mainTabsContainer" app:destination="@id/main_nav_graph" />

Then navigate the same way in activity like solution B.

None of these way works. Anything wrong?

Read Entire Article