I have an activity A that start activity B passing to it some intent data. Activity B host a navigation graph from the new Navigation Architecture Component.I want to pass that intent data to the startDestination fragment as argument how to do that?
TLDR: You have to manually inflate the graph, add the keys/values to the defaultArgs, and set the graph on the navController
.
Step 1
The documentation tells you to set the graph in the <fragment>
tag in your Activity
's layout. Something like:
<fragment
android:id="@+id/navFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
app:graph="@navigation/nav_whatever"
app:defaultNavHost="true"
/>
REMOVE the line setting the graph=
.
Step 2
In the Activity that will be displaying your NavHostFragment
, inflate the graph like so:
val navHostFragment = navFragment as NavHostFragment
val inflater = navHostFragment.navController.navInflater
val graph = inflater.inflate(R.navigation.nav_whatever)
Where navFragment
is the id you gave your fragment in XML, as above.
Step 3 [Crucial!]
Create a bundle to hold the arguments you want to pass to your startDestination
fragment and add it to the graph's default arguments:
val bundle = Bundle()
// ...add keys and values
graph.addDefaultArguments(bundle)
Step 4
Set the graph on the host's navController
:
navHostFragment.navController.graph = graph