I have a fragment name is HomeNavHostFragment và trong layout của nó tôi có chứa một FragmentContainerView: I have a fragment named HomeNavHostFragment and its layout contains a FragmentContainerView And specifically my code snippets are like below:
Kotlin code:
class HomeNavHostFragment : BaseFragment<FragmentHomeNavHostBinding, HomeNavHostViewModel>() {
override val layoutResourceId: Int = R.layout.fragment_home_nav_host
override val classTypeOfViewModel: Class<HomeNavHostViewModel> =
HomeNavHostViewModel::class.java
override val nestedNavHostFragmentId: Int = R.id.nested_nav_host_fragment_home
override val navGraphId: Int = R.navigation.nav_graph_home
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val mainNavController =
Navigation.findNavController(requireActivity(), R.id.nav_host_fragment)
val nestedNavHostFragment =
childFragmentManager.findFragmentById(nestedNavHostFragmentId) as? NavHostFragment
navController = nestedNavHostFragment?.navController
listenOnBackPressed()
}
@SuppressLint("BinaryOperationInTimber")
override fun initView() {
super.initView()
}
}
fragment_navhost_home.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nested_nav_host_fragment_home"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:defaultNavHost="false"
app:navGraph="@navigation/nav_graph_home" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
nav_graph_home.xml:
<?xml version="1.0" encoding="utf-8"?>
<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/fragment_nav_host_home"
app:startDestination="@id/home_fragment">
<fragment
android:id="@+id/home_fragment"
android:name="com.apps.ultrawallpapers.view.home.HomeFragment"
android:label="fragment_home"
tools:layout="@layout/fragment_home" />
</navigation>
And I am facing a problem that I have a data in HomeNavHostFragment I need to send to HomeFragment but I don't know how to do it, even though I tried the below code inside onViewCreated() of HomeNavHostFragment, but it can't solve the problem there, so can someone help me to solve this problem.
var bundle = bundleOf("KEY" to "SAMPLE")
mainNavController.setGraph(R.navigation.nav_graph_home,bundle)
My example is following the instructions from this link: Sample
EDIT
With the help of Arpit Shukla I managed to solve the problem, Partly due to my own lack of it,
The way to solve that problem is:
remove line
app:navGraph="@navigation/nav_graph_home
in fragment_navhost_home.xml and inside onViewCreated of HomeNavHostFragment you need to add the following code:
var bundle = bundleOf("KEY" to "SAMPLE")
navController?.setGraph(R.navigation.nav_graph_home,bundle)