How does one pass argument(s) to a nested Navigation architecture component graph?
Let's say I construct my navigation graph to navigate from FragmentA --> Nested, where Nested contains FragmentB --> FragmentC...
If this was a pure FragmentA --> FragmentB... graph, I would just set up the navigation with FragmentADirections.actionFragmentAToFragmentB(argument = foo). But that action takes zero arguments as soon as you turn B --> C into Nested... 
So what am I supposed to do?
In the Navigation editor, click on the destination that receives the argument. In the Attributes panel, click Add (+). In the Add Argument Link window that appears, enter the argument name, argument type, whether the argument is nullable, and a default value, if needed. Click Add.
Global actions might be a way but I didn't get that working as I wanted once I extracted the nested graph to its own .xml. But it turned out to be embarrassing simple - just add the arguments manually in code, to your action.
An example related to the question would be:
Save the nested graph to nested_graph.xml, it will look something like 
<navigation     android:id="@+id/nested_graph"     app:startDestination="@id/fragmentB"     ...>      <fragment          android:id="@+id/fragmentB"         ...>         <argument             android:name="foo"             app:argType="integer"/>         <action              ... // navigation action to FragmentC />     </fragment>      <fragment ...  // FragmentC stuff </navigation>   To pass arguments to nested_graph.xml from a different graph, say root_graph.xml do
<navigation     android:id="@+id/root_graph"     app:startDestination="@id/fragmentA"     ...>      <fragment          android:id="@+id/fragmentA"         ... >         <action             android:id="@+id/action_fragmentA_to_nested_graph"             app:destination="@id/nested_graph">             <argument                 android:name="foo"                 app:argType="integer"/>         </action>     </fragment>     <include app:graph="@navigation/nested_graph"/> </navigation>   In other words, just add the same <argument ... /> to the root_graph action as you expect to receive in the nested_graph.
actully it's very simple you just need to add your arguments in nested_nav for example
 <navigation         android:id="@+id/root_graph"         app:startDestination="@id/fragmentA"             ...>              <fragment                 android:id="@+id/fragmentA"             ... >             <action                 android:id="@+id/action_fragmentA_to_nested_graph"                 app:destination="@id/nested_graph">             </action>         </fragment>         <navigation             android:id="@+id/nested_graph"             app:startDestination="@id/fragmentB"                 ...>             <argument                 android:name="foo"                 app:argType="integer"/>             <fragment             android:id="@+id/fragmentB"                 ...>             <argument             android:name="foo"             app:argType="integer"/>             <action                 ... // navigation action to FragmentC />                 </fragment>                          <fragment ...  // FragmentC stuff         </navigation>     </navigation>  or you can send your data with a bundle
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With