Я следую этой серии руководств руководству по чату , и я сделал приложение для чата с базой данных firebase в реальном времени. Первое изображение показывает, как выглядят сообщения чата до прокрутки сообщений recyclerView, а второе изображение показывает, как последовательность сообщений руины и изображения извлекают многие после прокрутки. а структура базы данных здесь
изображений
в этой структуре узел ChatList имеет uid текущего пользователя в качестве дочернего, а его дочерние элементы - это идентификатор пользователя, с которым у него был чат, поэтому это можно рассматривать как комнату чата. а узел чатов имеет дочерний элемент в качестве идентификатора сообщения, и все сообщения приложения находятся здесь. возможно, проблема с recyclerView в chatActivity, но я не смог ее получить.
private lateinit var recyclerViewChat: RecyclerView
recyclerViewChat = findViewById(R.id.recyclerView_chat_activity)
recyclerViewChat.setHasFixedSize(true)
val linearLayoutManager = LinearLayoutManager(applicationContext)
linearLayoutManager.stackFromEnd = true
recyclerViewChat.layoutManager = linearLayoutManager
private fun retrieveMessages(senderID: String, receiverId: String) {
mChatList = ArrayList()
val messageRef = dbRef.child("Chats")
messageRef.keepSynced(true)
messageRef.addValueEventListener(object : ValueEventListener{
override fun onDataChange(p0: DataSnapshot) {
(mChatList as ArrayList<Chat>).clear()
for (snapshot in p0.children){
val chat = snapshot.getValue(Chat::class.java)
if(chat!!.getReceiver() == senderID && chat.getSender() == receiverId ||
chat.getReceiver() == receiverId && chat.getSender() == senderID){
(mChatList as ArrayList<Chat>).add(chat)
}
chatsAdapter = ChatsAdapter(this@ChatActivity, (mChatList as ArrayList<Chat>))
recyclerViewChat.adapter = chatsAdapter
}
}
})
}