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

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


As @ianhanniballake mentioned in his updated answer, you need to use the latest version of Navigation.

Assume we have an Enum like below and your app package name is com.example.app.

package com.example.app.path.to.type.file

public enum class Type {
    First,
    Second,
    Third
}

Now we just need to declare the Arg like this:

<fragment
    ...>
    <argument
        android:name="type"
        android:defaultValue="Second"
        app:argType=".path.to.type.file.Type" />
...
</fragment>