我是Kotlin和Android编程的新手。我不明白为什么onChanged没有出现在前两个例子中,但最后一个例子还可以。任何建议都将不胜感激。
var liveDataTest:MutableLiveData<String> = MutableLiveData("ABC")
liveDataTest.observe(this, androidx.lifecycle.Observer() {
//Cannot find "override fun onChanged"
})
var liveDataTest:LiveData<String> = MutableLiveData("ABC")
liveDataTest.observe(this, androidx.lifecycle.Observer() {
//Cannot find "override fun onChanged"
})
class test:androidx.lifecycle.Observer<String>{
override fun onChanged(t: String?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
在kotlin中,用户可以直接观察,而无需实现覆盖方法:
val liveDataTest: MutableLiveData<String> = MutableLiveData("ABC")
liveDataTest.observe(this, androidx.lifecycle.Observer { it ->
Toast.makeText(context,it,Toast.LENGTH_SHORT).show()
})
前两个语法错误。如果您想传递这样的匿名类,语法是使用object
关键字,并且由于Observer是一个接口,而不是一个类,所以您不需要用()
调用它的构造函数。
liveDataTest.observe(this, object: androidx.lifecycle.Observer {
override fun onChanged(t: String?) {
TODO("not implemented")
}
})
但由于这是Java定义的单函数接口,您可以使用lambda:来简化语法
liveDataTest.observe(this) {
TODO("not implemented")
}