我希望每当有一个新元素添加到我的列表时更新我的文本..我试图通过下面的代码来做到这一点..
var myList: MutableList<ArrayList<String>> by Delegates.observable(mutableListOf(), onChange = { _, _, new ->
Constants.debug("Value Changed")
})
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用..任何想法?
它不起作用,因为observabe委托只观察变量的变化,而不观察存储在变量中的对象.因此,当列表更改时,变量仍指向相同的列表,并且可观察的委托不知道有任何更改.要观察这一点,你需要一些实际观察列表内容的方法,这不是Kotlin或Java提供的开箱即用的东西.你需要某种可观察的清单.
或者,您可以使用标准列表(而不是可变列表),并且每当您需要更改列表时,请将其替换为新版本的列表.这样您就可以像想要的那样收听更改,但可能需要使用该列表调整许多其他代码.
你可以使用这样的东西:
class ObservableList<T>(private val wrapped: MutableList<T>): MutableList<T> by wrapped, Observable() {
override fun add(element: T): Boolean {
if (wrapped.add(element)) {
setChanged()
notifyObservers()
return true
}
return false
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3969 次 |
| 最近记录: |