【发布时间】:2020-07-09 20:50:54
【问题描述】:
我有两个房间查询。
@Query("Select * from accountGroup")
fun getAll(): LiveData<List<AccountGroupDto>>
@Query("Select * from accounts")
fun getAll(): LiveData<List<AccountDto>>
通过这 2 个结果列表,我想创建一个新的 ShareItem 列表
data class ShareItem
(val accountId: Int, val accountGroupId: Int, val isGroup: Boolean)
我想在我的活动中观察它的组合列表。 所以我有一个实现 MediatorLiveData 的存储库,它添加了两个源,我希望每个项目都进行转换(创建一个 ShareItem)并将其添加到 mutableLiveData 并将其提供给 viewModel。
override fun getShareItems(): LiveData<List<Int>> {
val shareItems = MutableLiveData<List<ShareItem>>()
val liveDataMerger = MediatorLiveData<List<Int>>()
liveDataMerger.addSource(accountGroupsDao.getAll()) { groups ->
// Transform each element in ShareItem ??
println("Group log")
}
liveDataMerger.addSource(accountsDao.getAll()) { accounts ->
// Transform each element in ShareItem ??
println("Account log")
}
return shareItems
}
但是我从未在控制台中看到 System.out。由于数据库显然充满了数据,我错过了什么?
【问题讨论】:
-
您将来源添加到
liveDataMerger,但返回shareItems -
重点是我在 Logcat 中看不到和 System.out。好像什么都没有叫
-
因为你没有观察到
liveDataMergerLiveData。 “仅当此 MediatorLiveData 处于活动状态时才会调用 onChanged 回调 (lambda)”。 -
IR42 是对的。我必须在 liveDateMerger 中添加组/帐户
标签: android kotlin repository-pattern android-livedata