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 │ ├── NotificationsNavHostBut 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?
