[英]How to create a observable List in kotlin
每當有新元素添加到我的列表時,我都想更新我的文本..我嘗試通過下面的代碼來做到這一點..
var myList: MutableList<ArrayList<String>> by Delegates.observable(mutableListOf(), onChange = { _, _, new ->
Constants.debug("Value Changed")
})
但它似乎不起作用..有什么想法嗎?
它不起作用,因為 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
}
}
我在這個方面很晚,但已經開發了一個提供可觀察集合的圖書館。
目前包括以下館藏:
列表
數組列表
鏈表
堆棧
矢量
地圖
數組映射
並發哈希映射
鏈接哈希映射
樹形圖
弱哈希映射
隊列
數組阻塞隊列
數組Deque
延遲隊列
鏈接阻塞隊列
鏈接傳輸隊列
優先阻塞隊列
隊列
同步隊列
套
哈希集
鏈接哈希集
樹集
隨着時間和每個請求,將添加更多。
你可以在https://github.com/theblitz/ObservableCollections找到它
並且可用於 jcenter() 上的 gradle,如下所示:
實施 'il.co.theblitz:observablecollections:1.2.0'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.