繁体   English   中英

使用 MutableList 时,Delegates.observable() 未收到通知

[英]Delegates.observable() is not getting notified when using MutableList

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

val items: MutableList<Item> by Delegates.observable(startingItems) {
        _, old, new ->
        Log.e("observable", "${old.size}  -> ${new.size}")
    }

但是每当我尝试删除或添加列表中的内容时,什么都没有发生。 我的意思是 Logcat 中没有日志的踪迹,因为它应该在那里。

文档状态:

可观察的

Delegates.observable()接受两个参数:初始值和修改处理程序。 每次我们分配给属性时(执行分配后)都会调用处理程序 它具有三个参数:分配给的属性、旧值和新值。

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

建议:将可变属性与只读List一起使用,并在添加新元素时重新分配它:

var items: List<String> by Delegates.observable(mutableListOf()) { _, old, new ->
    println("changed")
}

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM