Null Navhostfragment/navcontroller With Fragmentcontainerview
Expected Create bottom app bar navigation using Navigation UI's BottomNavigationView and FragmentContainerView similar to the sample app NavigationAdavancedSample. Note, Navigatio
Solution 1:
I also had this problem. My mistake was that I did not enter the correct ID for navigation tag in navigation files. Note that the ID must be equal to the ID of the menu items.
in navigation file (navigation/home.xml):
<navigation
android:id="@+id/home" ... >
and in menu file (menu/bottom_nav.xml):
<item
android:id="@+id/home" ... />
Solution 2:
Add a parent navigation graph for the BottomNavigationView
menu items.
The full sample code is included within BottomNavigationSample.
- Create a parent level navigation graph for the menu fragments. Note, this is not reflected in the NavigationAdvancedSample architecture pattern which has three separate navigation graphs without a parent navigation graph.
This can be accomplished with one parent navigation graph and fragments or nested navigation graphs for each menu item. Nested navigation graphs are good because each sub-flow can be organized within the nested graph.
main.xml
<?xml version="1.0" encoding="utf-8"?><navigationxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/main"app:startDestination="@id/home"><includeapp:graph="@navigation/home" /><includeapp:graph="@navigation/saved" /></navigation>
- Add the parent graph using
navGraph
in theFragmentContainerView
.
activity_main.xml
<LinearLayoutxmlns: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:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><androidx.fragment.app.FragmentContainerViewandroid:id="@+id/nav_host_container"android:name="androidx.navigation.fragment.NavHostFragment"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"app:defaultNavHost="true"app:navGraph="@navigation/main"/><com.google.android.material.bottomnavigation.BottomNavigationViewandroid:id="@+id/bottom_nav"android:layout_width="match_parent"android:layout_height="wrap_content"app:menu="@menu/bottom_nav" /></LinearLayout>
- Enable the
BottomNavigationView
in MainActivity.kt.
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import kotlinx.android.synthetic.main.activity_main.*
classMainActivity : AppCompatActivity() {
overridefunonCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val appBarConfiguration = AppBarConfiguration(setOf(R.id.home, R.id.saved))
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_container) as NavHostFragment
val navController = navHostFragment.navController
setupActionBarWithNavController(navController, appBarConfiguration)
bottom_nav.setupWithNavController(navController)
}
}
Post a Comment for "Null Navhostfragment/navcontroller With Fragmentcontainerview"