关于android:刷新项目列表的MutableLiveData

Refreshing MutableLiveData of list of items

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

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

1
MutableLiveData<List<SearchResult>>

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

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

是否可以在更新后备列表时(不仅在更新LiveData对象时)使LiveData通知其观察者?

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

1
2
3
4
5
val results = MutableLiveData<MutableList<SearchResult>>()

/* later */

results.value.addAll(newResults)

这有效:

1
2
3
4
5
6
7
8
val results = MutableLiveData<MutableList<SearchResult>>()

/* later */

val list = mutableListOf<SearchResult>()
list.addAll(results.value)
list.addAll(newResults)
results.value = list


我认为扩展名要好一些。

1
2
3
4
5
operator fun < T > MutableLiveData<ArrayList< T >>.plusAssign(values: List< T >) {
    val value = this.value ?: arrayListOf()
    value.addAll(values)
    this.value = value
}

用法:

1
list += anotherList;

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