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>