簡體   English   中英

如何在 kotlin 中創建可觀察列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM