问题描述
按钮的文本切换 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
属性