小编Ser*_*t69的帖子

Android 分页库 + 房间关系

我见过的分页库的示例都假设您需要一个Livedata<List<T>>,但是列表位于另一个对象内部的房间关系怎么样?

我的应用程序中有两个实体:Conversation并且Message它们与此类相关:

data class ConversationWithMessages(
    @Embedded val conversation: Conversation,
    @Relation(
        parentColumn = "conversation_gid",
        entityColumn = "conversationId"
    )
    val messages: List<Message>
)
Run Code Online (Sandbox Code Playgroud)

我从不将所有消息作为 来获取LiveData<List<Message>>,而是将单个对话(通过其 ID)及其所有子消息获取。DAO 函数如下所示:

@Transaction
@Query("SELECT * FROM conversations WHERE conversation_gid =:conversationId LIMIT 1")
fun getConversationLiveDataById(conversationId: Long): LiveData<ConversationWithMessages>
Run Code Online (Sandbox Code Playgroud)

我有一个存储库,它只是LiveData<ConversationWithMessages>直接从 DAO 返回数据。

在视图模型中,我有一个conversations保存实时数据的变量:

var conversation: LiveData<ConversationWithMessages> = MutableLiveData()
// ...
conversation = conversationRepository.getConversation(conversationId)
Run Code Online (Sandbox Code Playgroud)

在我的片段中,我只是观察此实时数据来更新适配器:

private val conversationObserver = Observer<ConversationWithMessages> {
    it?.let {
        // it.messages gives me the list …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-room android-livedata

5
推荐指数
0
解决办法
426
查看次数

标签 统计

android ×1

android-livedata ×1

android-room ×1

kotlin ×1