Android 房间如何获取2个实体作为1个实时数据列表?

Android 房间如何获取2个实体作为1个实时数据列表?,android,kotlin,android-room,Android,Kotlin,Android Room,我想得到两个不同的实体,作为1LiveDataList 这样我就可以在回收视图中显示它们了 并在数据更改时更新它如果我理解正确,在它自己的dao中有两个房间实体,都有一个值。 您希望将这些内容合并到一个列表中(最多包含2项),该列表可以作为liveData进行观察 我会使用MediatorLiveData,从Room中获取实体作为liveData,并像这样组合它们: class SomeClass { private val list1: LiveData<Something>

我想得到两个不同的实体,作为1LiveDataList 这样我就可以在回收视图中显示它们了
并在数据更改时更新它

如果我理解正确,在它自己的dao中有两个房间实体,都有一个值。 您希望将这些内容合并到一个列表中(最多包含2项),该列表可以作为liveData进行观察

我会使用MediatorLiveData,从Room中获取实体作为liveData,并像这样组合它们:

class SomeClass {
    private val list1: LiveData<Something> = dao1.getLiveSomething()
    private val list2: LiveData<Something> = dao2.getOtherLiveSomething()
    private val _combinedList = MediatorLiveData<List<Something>>().apply{
        addSource(list1){
            value = listOfNotNull(it, list2.value)
        }
        addSource(list2){
            value = listOfNotNull(list1.value, it)
        }
    }

    /**
     * Observe this for combined list
     */
    val combinedList: LiveData<List<Something>>
        get() = _combinedList
}
class-SomeClass{
private val list1:LiveData=dao1.getLiveSomething()
private val list2:LiveData=dao2.getOtherLiveSomething()
private val_combinedList=MediatorLiveData()。应用{
addSource(列表1){
value=listOfNotNull(它,list2.value)
}
addSource(列表2){
value=listOfNotNull(list1.value,it)
}
}
/**
*对于组合列表,请遵守此操作
*/
val组合列表:LiveData
get()=\u组合列表
}

这样,当文件室中的一个实体发生更改时,
combinedList
将向任何观察者发送新数据。

尝试为recyclerview创建自定义适配器,并根据需要操作数据和视图。您可以使用。我使用RxJava/RxKotlin来映射、组合和压缩我的流。对于RxJava,有一些库可以将其与room和livedata(以及改装)一起使用。房间数据库返回一个可观察的列表(2个单独的实体,因此有2个可观察)。使用
Observables.combinelateTest()
可以获得一个新的流,其中包含两个查询的最新值(作为一对),如果需要,可以将其映射到其他内容。使用
LiveDataReactiveStreams.fromPublisher()
可以将其转换为LiveData。如果任何房间查询更新,将更新livedata。