BottomNavigationView with nested graph

Viewed 235

I have a problem in my application when using nested graph in my nave graph xml file It's my nav_graph file

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

    <include app:graph="@navigation/nav_entries"/>
    <include app:graph="@navigation/nav_states"/>
    <include app:graph="@navigation/nav_calendar"/>
    <include app:graph="@navigation/nav_more"/>

</navigation>

and this is fragment container view in activity_main

 <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragmentContainerView"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph" />

And this is code from main activity to setup bottom navigation view with nave controller

 private fun setupUi() {
        val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as NavHostFragment
        navController = navHostFragment.navController()
        binding.bottomNavigationView.setupWithNavController(navController)
    }

But when I run the app, It will crash and this is error :

navigation destination com.iranmobiledev.moodino:navigation/nav_entries is not a direct child of this NavGraph

Help me to fix.

2 Answers

It's incorrect. In navigation, not all nested navigation graphs should be defined with include, and a node(fragment) should be defined as the start destination. You can define other fragments in the nested navigation graph and use it with the include tag. Use this code:

app:startDestination="@id/first_fragment_id">

Instead of:

app:startDestination="@navigation/nav_entries">

I faced the same issue.

instead of adding the graph in xml, inflate it programmatically. the issue will be resolved.

Related