0

我正在尝试使用Recycler View并显示列表来创建列表视图。可以说我要显示的内容就像一个典型的聊天屏幕 - 图像、消息、sender_name 等。

所以所有这些数据都存储在 Firebase 实时数据库中。我也在使用ViewModel并且想使用DiffUtil以提高效率 - 因为可以删除、编辑、加星标、添加新消息等。由于DiffUtil,我使用的是ListAdapter.

我面临的问题是ListAdapter需要 aList并且我使用ChildEventListener.

我现在如何使用 Firebase 观察更改LiveData,然后更新我的列表,以便我可以传回我的DiffUtil? 因此,如果我添加一条新消息,我希望将其添加到我的消息中,RecyclerView并且我希望使用它来执行此操作,DiffUtil因为列表也可以更新。

我通过研究发现,我可能需要Room为此目的使用并观察查询的变化 - 所以观察类似于getAllMessages()返回完整列表的方法,然后我可以使用它传递到我的DiffUtil. 这对我来说听起来有点矫枉过正—— Room.

关于如何实现我的需求的任何指示或建议?

这是我的数据库的结构: 在此处输入图像描述

4

2 回答 2

0

如果你敢于开始编写一个应用程序,你将无法很快与 Room 相处。如果你迈出这一步,SQL知识也是必不可少的......所以不要害羞,敢于去做

GGK

于 2019-11-25T09:50:23.073 回答
0

所以我通过在我的ViewModel.

private val _message = MutableLiveData<List<TextListModel>>()

val message: LiveData<List<TextListModel>>
        get() = _message

//...

private val eventListener =
        object : ValueEventListener {
            override fun onCancelled(databaseError: DatabaseError) {
                Timber.e("Error!! ${databaseError.toException()}")
            }

            override fun onDataChange(dataSnapshot: DataSnapshot) {

                val listOfMessages : MutableList<TextListModel> = mutableListOf()

                for(msg in dataSnapshot.children) {
                    val item = msg.getValue(TextListModel::class.java)
                    listOfMessages.add(item!!)
                }

                _message.value = listOfMessages
            }
        }

在我的片段中,我观察messageadapter.submitList(newList)在有更新时执行。

这种数据下载ValueEventListener是令人担忧的,因为它从节点下提取数据。我正在检查如何ChildEventListener用于我的目的。

编辑

似乎价值事件不会下载完整的树!值事件处理本地状态的数据,并且只下载增量。

2016年此 Youtube 视频中的更多信息!

于 2019-11-26T06:16:16.103 回答