Я пытаюсь использовать Firestore для запроса и обновления списка сообщений чата, который будет показывать фиксированное число (5 для этого примера) самых последних запрашиваемых сообщений внизу, убывая вверх по отметке времени, и сообщения, добавленные послезапрос в том же порядке, что и в обычном приложении чата:
- queriedmessage1 <-oldester queried </li>
- queriedmessage2
- queriedmessage3
- queriedmessage4
- queriedmessage5 <-newest запрашивается </li>
- newmessage1 <-добавлено после запроса </li>
Это требует от меня сортировки запроса по убыванию и использования setReverseLayout в LayoutManager из RecyclerView.Затем мне необходимо добавить новые сообщения в начало ArrayList
, чтобы они отображались внизу, поскольку позиция [0] теперь находится внизу экрана.Вот мой код для этого:
Query query = mCollection.orderBy("timestamp",Query.Direction.DESCENDING).limit(5);
query.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
for (DocumentChange documentChange : queryDocumentSnapshots.getDocumentChanges()) {
switch (documentChange.getType()) {
case ADDED:
Message message = documentChange.getDocument().toObject(Message.class);
mMessages.add(0,message);
mAdapter.notifyDataSetChanged();
}
}
}
Тем не менее, изменение messages.add(message)
на messages.add(0,message)
изменяет порядок отображения сообщений при создании, оставляя мне что-то вроде этого:
- queriedmessage5 <-новое новое запрос </li>
- queriedmessage4
- queriedmessage3
- queriedmessage2
- queriedmessage1 <-стрейший запрос </li>
- newmessuser after query
Как сделать различие между сообщениями, добавленными onCreate, и сообщениями, добавленными после, для создания желаемого эффекта?