我是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.
}
}发布于 2020-02-19 12:25:09
在kotlin中,用户可以直接观察,而无需实现覆盖方法:
val liveDataTest: MutableLiveData<String> = MutableLiveData("ABC")
liveDataTest.observe(this, androidx.lifecycle.Observer { it ->
Toast.makeText(context,it,Toast.LENGTH_SHORT).show()
})发布于 2020-02-19 11:17:48
在前两个中,您的语法是错误的。如果您想要传递这样的匿名类,语法是使用object关键字,并且因为观察者是一个接口,而不是一个类,所以您不需要使用()调用它的构造函数。
liveDataTest.observe(this, object: androidx.lifecycle.Observer {
override fun onChanged(t: String?) {
TODO("not implemented")
}
})但由于这是Java定义的单函数接口,您可以使用lambda来简化语法:
liveDataTest.observe(this) {
TODO("not implemented")
}https://stackoverflow.com/questions/60291755
复制相似问题