Firebase UI:如何将新消息添加到 recycleView 的顶部
Firebase UI: How to add new message to the top of recycleView
我正在使用 Firebase 回收适配器来显示我的消息。我想在回收视图的顶部显示新收到的消息。
例如,Jfi 的新 sent/received 消息.. 应该在最上面。
这是我的数据库结构。
代码:
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();
谢谢
你可以将带有时间戳的消息存储到 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");
我正在使用 Firebase 回收适配器来显示我的消息。我想在回收视图的顶部显示新收到的消息。 例如,Jfi 的新 sent/received 消息.. 应该在最上面。
这是我的数据库结构。
代码:
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();
谢谢
你可以将带有时间戳的消息存储到 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");