Firebase UI: как добавить новое сообщение в начало recycleView - PullRequest
0 голосов
/ 21 декабря 2018

Я использую Firebase Recycle Adapter для отображения моих сообщений.Я хочу отобразить вновь полученное сообщение поверх представления корзины.Например, недавно отправленное / полученное сообщение от Jfi .. должно быть сверху.

screenshot

Вот моя структура БД.

db structure

Код:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    Query query = rootRef.child("messages").child(messageSenderId).child(messageReceiverId);


    FirebaseRecyclerOptions<ChatMessage> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<ChatMessage>()
            .setQuery(query, ChatMessage.class)
            .build();

Спасибо

1 Ответ

0 голосов
/ 21 декабря 2018

вы можете сохранять сообщения в Firebase с отметкой времени, затем, когда вы извлекаете все данные сообщения, сравниваете их с остальными сообщениями и сортируете по дате, и они отображают вверху самые новыеили просто инвертируйте RecyclerView, и вы увидите последние сообщения в верхней части RecyclerView

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
myRecyclerView.setLayoutManager(linearLayoutManager);

РЕДАКТИРОВАТЬ

Вы можете сравнить значениякаждого сообщения и сортируйте их по отметке времени, полученной из Firebase

 public class timeStampSort implements Comparator<YourModel> {

        @Override
        public int compare(YourModel o1, YourModel o2) {
            return Long.compare(o2.getTimestamp(), o1.getTimestamp());

        }

    }

, а затем перед вызовом mAdapter = new MessagesAdapter.... сделайте это

Collections.sort(yourArray, new timeStampSort());

Это должно упорядочить ваши сообщения с отметкой времени от каждогоодин без необходимости инвертировать RecyclerView

Вышеупомянутая сортировка может быть выполнена, если вы уже сделали другой orderByChild в своем запросе, и вы не можете сделать это более одного раза.

Но, как предполагает Фрэнк, гораздо эффективнее сделать это с orderByChild, поэтому вы можете сделать это только

Query query = rootRef.child("messages").child(messageSenderId).child(messageReceiverId).orderByChild("timestamp");
...