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