Вы можете заказать клиентскую часть чатов или использовать индексированный адаптер Firebase.
Для этого вам необходимо создать дополнительную структуру в вашей базе данных, например:
root
- Chats...
- Messages...
- UserActiveChats
- UserId <- your id
- FriendUserId: TimeStamp
- FriendUserId: TimeStamp
Тогда вынеобходимо изменить функцию «Add-Chat-Message (как бы вы ее ни реализовали)» на WriteBatch, которая:
- создает сообщение ChatMessage (как сейчас, в / Messages / userId / friendId / ..)
- Создает / Устанавливает значение в /UserActiveMessages/userId/friendId:ServerValue.TimeStamp
Таким образом, вы можете создать запрос в / UserActiveMessages / myUserId и упорядочить его по значению (отметка времени), которая представляет собой последний раз, когда они отправили вам сообщение.Таким образом, вы получите упорядоченный список последних пользователей, отправивших вам сообщение.Тогда все, что вам нужно сделать, это использовать индексированный FirebaseRecyclerAdapter для отображения реальных чатов, а не только их userId.
keyQuery = rootReference.child('/UserActiveMessages/userId').orderByValue();
chatsRef = rootReference.child('/Messages/userId/');
FirebaseRecyclerOptions<Chat> options = new FirebaseRecyclerOptions.Builder<Chat>()
.setIndexedQuery(keyQuery, chatsRef, Chat.class)
.build();
посмотрите, как реализовать остальные здесь: https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md#using-firebaseui-with-indexed-data