观察java中的实时数据列表

xpcnnkqh  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(428)

我有一个livedata的列表,比如 List<LiveData<String>> . 我要遵守这个清单,以便 String 内部 LiveData 更改后,它将通知观察员该列表 String .
我该怎么做?
我的列表元素 LiveData<String> 所以,不能简单化为 String .
我知道如何观察 LiveData<String> ,但不是 List<LiveData<String>> .
请帮忙。
编辑:
列表的元素是 LiveData<String> 因为 String 它来自互联网。所以,列表元素是 LiveData<String> .

x33g5p2x

x33g5p2x1#

我知道如何观察livedata,但不知道如何列出。
没那么难,你要做的就是交换 List<LiveData<String>> 成为一个 LiveData<List<String>> .
为此,你可以使用 MediatorLiveData .

fun <T> List<LiveData<T>>.combineList(): LiveData<List<T>> = MediatorLiveData<List<T>>().also { mediator ->
    val mutableList = this.map { it.value }.toMutableList()

    mediator.value = ArrayList(mutableList).toList()

    forEachIndexed { index, liveData ->
        addSource(liveData) { value
            mutableList[index] = value
            mediator.value = ArrayList(mutableList).toList()
        }
    }
}

一个观察者就能观察到

strings.combineList().observe(viewLifecycleOwner) { listOfStrings -> ... }

所有代码都可以直接转换成java,这个答案中没有使用kotlin特定的代码。

5sxhfpxr

5sxhfpxr2#

如果你想观察 List<LiveData<String>> ,则必须为列表的每个元素添加一个观察者。列表本身是不可观察的,只有它的每个livedata元素。所以,简单地说:
迭代列表
观察每个livedata元素
决定要为每个观察到的元素执行的操作

相关问题