刷新项目列表的MutableLiveData

Fra*_*esc 12 android android-livedata android-architecture-components

我正在使用我的应用程序中的体系结构组件中的LiveData和ViewModel.

我有一个分页的项目列表,我在用户向下滚动时加载更多.查询结果存储在

MutableLiveData<List<SearchResult>>
Run Code Online (Sandbox Code Playgroud)

当我执行初始加载并将变量设置为新列表时,它会在绑定适配器上触发回调,将数据加载到recyclerview中.

但是,当我加载第二页并将其他项添加到列表中时,不会触发回调.但是,如果我用包含旧项和新项的新列表替换列表,则回调会触发.

是否可以让LiveData在更新支持列表时通知其观察者,而不仅仅是在LiveData对象更新时?

这不起作用(忽略空检查):

val results = MutableLiveData<MutableList<SearchResult>>()

/* later */

results.value.addAll(newResults)
Run Code Online (Sandbox Code Playgroud)

这有效:

val results = MutableLiveData<MutableList<SearchResult>>()

/* later */

val list = mutableListOf<SearchResult>()
list.addAll(results.value)
list.addAll(newResults)
results.value = list
Run Code Online (Sandbox Code Playgroud)

Sam*_*HEA 9

我认为扩展名更好一些。

operator fun <T> MutableLiveData<ArrayList<T>>.plusAssign(values: List<T>) {
    val value = this.value ?: arrayListOf()
    value.addAll(values)
    this.value = value
}
Run Code Online (Sandbox Code Playgroud)

用法:

list += anotherList;
Run Code Online (Sandbox Code Playgroud)


Shy*_*ine 5

根据MutableLiveData,您需要使用postValuesetValue来触发观察者。

  • 他正在使用Kotlin。`results.value`等于`results.setValue()` (13认同)