Firebase UI:如何将新消息添加到recycleView的顶部

时间:2018-12-20 22:03:07

标签: android firebase firebase-realtime-database android-recyclerview firebaseui

我正在使用Firebase回收适配器来显示我的消息。我想在回收视图顶部显示新收到的消息。 例如,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 :(得分:2)

您可以使用时间戳将消息存储到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,并且只能进行一次以上的操作,则可以完成上述排序。

但是,正如弗兰克(Frank)建议的那样,使用orderByChild执行此操作效率更高,因此您只能执行此操作

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