简体   繁体   English

如何获取同伴object中的packageName?

[英]How to get packageName in companion object?

I want to make a unique key when i send a intent/bundle to new Activity/Fragment in Android.当我将意图/捆绑包发送到 Android 中的新活动/片段时,我想制作一个唯一的密钥。
So, i decided to use packageName .所以,我决定使用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
        )
    }
}

But, in this case, i couldn't use this@Companion::class.java.packageName because the android system warns me that it requires API 31(mine supports API 21).但是,在这种情况下,我不能使用this@Companion::class.java.packageName因为 android 系统警告我它需要 API 31(我的支持 API 21)。

How can i make it?我怎样才能做到? or could you tell me another good way?或者你能告诉我另一个好方法吗?

Try this code试试这个代码

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
        }
    )
}

OR just create Unique Constant String value for each Fragment/Activity .或者只是为每个Fragment/Activity创建 Unique Constant String值。

You may use the package field for the same.您可以使用package字段。 Like so:像这样:

val MY_UNIQUE_KEY = "${this@Companion::class.java.`package`?.name.orEmpty()}MY_KEY"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM