找不到上下文时如何在 Kotlin 代码中获取 XML 的资源?

问题描述

按钮的文本切换 OK/Canel 取决于它的 onClickListener()

代码和XML中都定义了“OK”和“Cancel”,如何在一处定义?

我尝试使用 btnText.value = application.resources.getString(R.string.cancel)

但是,应用程序只能在init{}的{​​{1}}内找到。

viewmodel.class中:

viewmodel.class

在 res/strings.xml 中:

class xxxviewmodel(application: Application,...

    val btnText = mutablelivedata<String>()

    fun funForListener(){
        if (condition) btnText.value ="OK"
        else btnText.value ="Cancel"

        // error,cannot find application
        btnText.value = application.resources.getString(R.string.cancel)
    }
     
    init{
        // no error
        btnText.value = application.resources.getString(R.string.cancel)
    }

解决方法

您的主构造函数不声明属性,而只是接收参数。这些只能在 init 块中使用。使用

class xxxViewModel(val application: Application,...) 

改为在 application 类中定义一个 xxxViewModel 属性

https://kotlinlang.org/docs/classes.html#constructors