我正在使用 Firebase Recycle Adapter 来显示我的消息。我想在回收 View 的顶部显示新收到的消息。 例如 Jfi.. 新发送/接收的消息应该在最上面。
这是我的数据库结构。
代码:
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");
关于android - 火力地堡用户界面 : How to add new message to the top of recycleView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53876651/