首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Android中访问Kotlin类的顶级函数中的字符串资源?

如何在Android中访问Kotlin类的顶级函数中的字符串资源?
EN

Stack Overflow用户
提问于 2022-03-12 13:14:34
回答 1查看 749关注 0票数 0

ELevel是Koltin顶部函数中的枚举类,但代码A是硬代码。

所以我试着使用代码B,但是它是错误的,我如何修复它呢?

码A

代码语言:javascript
复制
enum class ELevel(val label:String){
   Whisper("Whisper"),
   Quiet("Quiet Library") 
}

码B

代码语言:javascript
复制
enum class ELevel(val label:String){
  Whisper(getApplicationContext().getString(R.String.Whisper)),
   Quiet(getApplicationContext().getString(R.String.Quiet)) 
}
    
<resources>
    <string name="Whisper">Whisper</string>
    <string name="Quiet">Quiet Library</string>    
</resources>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-12 14:53:03

我会这样做:

代码语言:javascript
复制
enum class ELevel(private val labelId: Int){
    Whisper(R.string.whisper),
    Quiet(R.string.quiet);

    fun getLabel(context: Context) =
        context.getString(labelId)
}

缺点是每次都必须传递一个上下文实例,但这是更安全的方法。

另一种方法是这样做:

代码语言:javascript
复制
enum class ELevel(private val labelId: Int){
    Whisper(R.string.whisper),
    Quiet(R.string.quiet);

    lateinit var label: String
        private set

    companion object {
        fun initialize(context: Context) {
            for (value in EValue.values()) value.label = context.getString(value.labelId)
        }
    }
}

然后在你的MainActivity.onCreate()中,打电话给ELevel.initialize(applicationContext)。但是,您必须小心,不要在运行在label之前的任何代码中使用onCreate()属性,比如在属性初始化器中。如果在任何服务中使用枚举,则需要在应用程序子类的onCreate()中调用onCreate(),但是需要小心this issue

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71450002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档