首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delegates.observable()在使用MutableList时没有收到通知

Delegates.observable()在使用MutableList时没有收到通知
EN

Stack Overflow用户
提问于 2018-03-01 18:42:59
回答 2查看 1.8K关注 0票数 4

我正在尝试使用Delegates.observable(),以便在MutableList上发生更改时得到通知。

代码语言:javascript
复制
val items: MutableList<Item> by Delegates.observable(startingItems) {
        _, old, new ->
        Log.e("observable", "${old.size}  -> ${new.size}")
    }

但是,每当我试图删除或添加列表中的内容时,都不会发生任何事情。我的意思是在日志里没有任何痕迹,因为它应该在那里。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-01 18:58:22

文档状态:

可观测 Delegates.observable()有两个参数:初始值和修改处理程序。处理程序每次分配给属性时(在执行赋值之后)都会调用该处理程序。它有三个参数:属性被赋值、旧值和新值。

在您的情况下,您不分配给items,您只添加到现有的实例。回调永远不会被调用。

建议:使用带有只读List的可变属性,并在添加新元素时重新分配它:

代码语言:javascript
复制
var items: List<String> by Delegates.observable(mutableListOf()) { _, old, new ->
    println("changed")
}

//add like this:
user.items += "new val"

plus运算符不调用列表中的add,而是创建一个包含所有旧元素和新元素的新实例。

票数 5
EN

Stack Overflow用户

发布于 2018-03-01 19:01:25

我找到了这个问题的答案,它实际上是‘因为Delegates.observable()只观察到变量的变化,而不是存储在该变量中的对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49056590

复制
相关文章

相似问题

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