【发布时间】:2018-08-21 02:56:57
【问题描述】:
我在我的应用程序的架构组件中使用 LiveData 和 ViewModel。
我有一个分页的项目列表,当用户向下滚动时我会加载更多。查询的结果存储在一个
MutableLiveData<List<SearchResult>>
当我进行初始加载并将变量设置为新列表时,它会触发绑定适配器上的回调,将数据加载到 recyclerview 中。
但是,当我加载第二页并将其他项目添加到列表时,不会触发回调。但是,如果我将列表替换为包含新旧项目的新列表,则会触发回调。
是否可以让 LiveData 在更新后备列表时通知其观察者,而不仅仅是在更新 LiveData 对象时?
这不起作用(忽略空检查):
val results = MutableLiveData<MutableList<SearchResult>>()
/* later */
results.value.addAll(newResults)
这行得通:
val results = MutableLiveData<MutableList<SearchResult>>()
/* later */
val list = mutableListOf<SearchResult>()
list.addAll(results.value)
list.addAll(newResults)
results.value = list
【问题讨论】:
-
我知道的唯一可能的方法是设置整个列表,以便通知观察者。可以在这里找到更好的技巧:stackoverflow.com/questions/48020377/…
-
谢谢,这主要是一种解决方法,但我会尝试一下。
标签: android kotlin android-livedata android-architecture-components