如何解决Android分页库+房间关系
我所看到的有关分页库的示例都假定您需要一个Livedata<List<T>>
,但是该列表位于另一个对象内部的Room关系又如何呢?
我的应用程序中有两个实体:Conversation
和Message
,它们与此类相关:
data class ConversationWithMessages(
@Embedded val conversation: Conversation,@Relation(
parentColumn = "conversation_gid",entityColumn = "conversationId"
)
val messages: List<Message>
)
我从不以LiveData<List<Message>>
的形式提取所有消息,而是一次对话(通过其ID)加上其所有子消息。 DAO函数如下所示:
@Transaction
@Query("SELECT * FROM conversations WHERE conversation_gid =:conversationId LIMIT 1")
fun getConversationLiveDataById(conversationId: Long): LiveData<ConversationWithMessages>
我有一个存储库,可以直接从DAO返回LiveData<ConversationWithMessages>
。
在Viewmodel中,我有一个conversations
变量来保存实时数据:
var conversation: LiveData<ConversationWithMessages> = MutableLiveData()
// ...
conversation = conversationRepository.getConversation(conversationId)
在我的片段上,我只是观察了此实时数据以更新适配器:
private val conversationObserver = Observer<ConversationWithMessages> {
it?.let {
// it.messages gives me the list I use to update
}
}
我最初想到在关系数据类上使用PagedList
:
data class ConversationWithMessages(
@Embedded val conversation: Conversation,entityColumn = "conversationId"
)
val messages: PagedList<Message>
)
然后返回DataSource
的DAO查询如下所示:
@Transaction
@Query("SELECT * FROM conversations WHERE conversation_gid =:conversationId LIMIT 1")
fun getConversationLiveDataById(conversationId: Long): DataSource.Factory<Int,ConversationWithMessages>
但是如何将这个数据源转换为配置了子LiveData<ConversationWithMessages>
的{{1}}?
Google有这个例子,但我看不到如何将其应用于这种情况:
PagedList<Message>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。