我想做一个唯一的键当我发送一个intent/bundle到新的Activity/Fragment在Android。
所以,我决定使用packageName
。
companion object {
val MY_UNIQUE_KEY = "${this@Companion::class.java.packageName}MY_KEY"
fun newInstance(user: User): UserFragment = UserFragment().apply {
arguments = bundleOf(
MY_UNIQUE_KEY to user
)
}
}
但是,在这种情况下,我不能使用this@Companion::class.java.packageName
,因为android系统警告我它需要API 31(我的支持API 21)。
我怎样才能做到呢?或者你能告诉我另一种好方法吗?
同样可以使用package
字段。像这样:
val MY_UNIQUE_KEY = "${this@Companion::class.java.`package`?.name.orEmpty()}MY_KEY"
试试这个代码
fun newInstance(user: User): UserFragment = UserFragment().apply {
arguments = bundleOf(
if (VERSION.SDK_INT >= VERSION_CODES.S) {
"${javaClass.packageName}MY_KEY" to user
} else {
"${javaClass.getPackage()?.name.orEmpty()}MY_KEY" to user
}
)
}
或者为每个Fragment/Activity
创建唯一的常数String
值。