首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >androidx ViewModel MutableLiveData LiveData

androidx ViewModel MutableLiveData LiveData
EN

Stack Overflow用户
提问于 2020-02-19 09:30:28
回答 2查看 426关注 0票数 0

我是Kotlin和Android编程的新手。我不明白为什么onChanged没有出现在前两个示例中,但是最后一个示例是可以的。任何建议都将受到更多的感谢。

代码语言:javascript
复制
var liveDataTest:MutableLiveData<String> = MutableLiveData("ABC")
liveDataTest.observe(this, androidx.lifecycle.Observer() {
 //Cannot find "override fun onChanged"
})
代码语言:javascript
复制
var liveDataTest:LiveData<String> = MutableLiveData("ABC")
liveDataTest.observe(this, androidx.lifecycle.Observer() {
 //Cannot find "override fun onChanged"
})
代码语言:javascript
复制
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.
    }
}
EN

回答 2

Stack Overflow用户

发布于 2020-02-19 12:25:09

在kotlin中,用户可以直接观察,而无需实现覆盖方法:

代码语言:javascript
复制
val liveDataTest: MutableLiveData<String> = MutableLiveData("ABC")
        liveDataTest.observe(this, androidx.lifecycle.Observer { it ->
            Toast.makeText(context,it,Toast.LENGTH_SHORT).show()
        })
票数 1
EN

Stack Overflow用户

发布于 2020-02-19 11:17:48

在前两个中,您的语法是错误的。如果您想要传递这样的匿名类,语法是使用object关键字,并且因为观察者是一个接口,而不是一个类,所以您不需要使用()调用它的构造函数。

代码语言:javascript
复制
liveDataTest.observe(this, object: androidx.lifecycle.Observer {
    override fun onChanged(t: String?) {
        TODO("not implemented")
    }
})

但由于这是Java定义的单函数接口,您可以使用lambda来简化语法:

代码语言:javascript
复制
liveDataTest.observe(this) {
    TODO("not implemented")
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60291755

复制
相关文章

相似问题

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