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,您需要使用