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

ken*_*hia 4 android kotlin

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

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

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

s1m*_*nw1 5

文档指出

可观察的

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

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

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

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

//add like this:
user.items += "new val"
Run Code Online (Sandbox Code Playgroud)

plus运算符不会调用add列表,而是使用所有旧元素加上新元素创建一个新实例。