documentation讨论了如何发送简单的整数和字符串。例如:
<argument
android:name="myIntArg"
android:defaultValue="255"
app:argType="integer" />
在原始片段中:
val action = OriginFragmentDirections.myAction(myInt)
findNavController().navigate(action)
在目标片段中:
val receivedInt = DestinationFragmentArgs.fromBundle(arguments).myIntArg
但是要说不是发送myIntArg
,而是要发送一个枚举(myEnumArg
)。我该怎么做?我会在论点中使用什么 app:argType
?
答案 0 :(得分:3)
正如@ianhanniballake在他的最新答案中提到的那样,您需要使用最新版本的Navigation。
假设我们有一个枚举,如下所示,并且您的应用程序包名称为com.example.app
。
package com.example.app.path.to.type.file
public enum class Type {
First,
Second,
Third
}
现在我们只需要这样声明Arg:
<fragment
...>
<argument
android:name="type"
android:defaultValue="Second"
app:argType=".path.to.type.file.Type" />
...
</fragment>
答案 1 :(得分:2)
编辑:根据Navigation 1.0.0-alpha08 release notes:
Safe Args支持可序列化的对象,包括Enum值。枚举类型可以使用不带类名的枚举文字来设置默认值(例如
app:defaultValue="READ"
)b/111316353
因此这是可能的-您将使用Enum类的名称(即com.example.EnumClass
)或相对名称(.EnumClass
),这将自动在应用程序的包名称前添加类名称
上一个答案:
在当前版本的Navigation(1.0.0-alpha07)中这是不可能的,但是existing feature request被标记为固定的,并且可以在alpha08中使用枚举作为参数的功能