在 Android Navigation 组件中,有一个 NavArgument 的类,它允许开发者将数据从一个 Fragment 或 Activity 传递到另一个地方。当 NavType 不能表示数据类型时,可以使用自定义 NavType。
对于 List
首先,定义一个 EnumListConverter,用来将 List
class EnumListConverter : TypeConverter>, String>() {
override fun fromString(value: String): List> {
return value.split(",").map { enumName ->
MyEnum.valueOf(enumName) // replace MyEnum with your Enum class
}
}
override fun toString(value: List>): String {
return value.joinToString(",") { it.name }
}
}
然后,定义一个 NavType,它使用我们刚刚定义的 EnumListConverter:
val LIST_ENUM_NAV_TYPE = object : NavType>, String>(true) {
override fun get(bundle: Bundle, key: String): List>? {
return bundle.getString(key)?.let {
EnumListConverter().fromString(it)
}
}
override fun put(bundle: Bundle, key: String, value: List>?) {
bundle.putString(key, value?.let { EnumListConverter().toString(it) })
}
override fun parseValue(value: String): List> {
return EnumListConverter().fromString(value)
}
override fun getName(): String {
return "listEnum"
}
}
最后,在 NavGraph 中使用我们定义的 NavType:
现在,我们可以通过 NavArgument 传递 List