Search code examples
androidandroid-architecture-navigation

What is the correct way to pass an Enum as an argument to a Fragment using Navigation Component safeargs


The documentation discusses how to send simple integers and strings. For example:

<argument
    android:name="myIntArg"
    android:defaultValue="255"
    app:argType="integer" />

In the origin Fragment:

val action = OriginFragmentDirections.myAction(myInt)
findNavController().navigate(action)

In the destination Fragment:

val receivedInt = DestinationFragmentArgs.fromBundle(arguments).myIntArg

But say instead of myIntArg, I wanted to send an enum (myEnumArg). How would I do that? What app:argType would I use in my argument?


Solution

  • Edit: As per the Navigation 1.0.0-alpha08 release notes:

    Safe Args supports Serializable objects, including Enum values. Enum types can set a default value by using the enum literal without the class name (e.g. app:defaultValue="READ") b/111316353

    So this is now possible - you would use the name of your Enum class (i.e., com.example.EnumClass) or a relative name (.EnumClass) which will automatically prepend your app's package name to the class name.

    Previous answer:

    This is not possible with the current version of Navigation (1.0.0-alpha07), but the existing feature request is marked as fixed and the ability to use enums as arguments will be available in alpha08