I have bottom navigation and replaced the tag with FragmentContainerView. It gives me an error stating that it does not have a NavController set. I posted this question on StackOverflow and fixed the problem. However, I encountered the following error when the orientation was changed and an item was selected in the bottom navigation.
java.lang.IllegalStateException: You must call setGraph() before calling getGraph()
FragmentContainer
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/mobile_navigation" /
finding fragment
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_classes, R.id.navigation_schedule, R.id.navigation_settings
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
This is fixed as per the 2.2.0-rc03 release notes:
NavHostFragment
now correctly restores the graph after a configuration change when used withFragmentContainerView
. (b/143752103)
So make sure you are using 2.2.0-rc03
.