java - 使用 SnapshotListener 在 ArrayList 的开头插入新的 Firestore 文档会翻转查询 onCreate 的顺序
问题描述
我正在尝试使用 Firestore 查询和更新聊天消息列表,该列表将在底部显示固定数量(本例中为 5)的最新查询消息,按时间戳向上递减,并在查询后添加消息下面是相同的顺序,就像一个典型的聊天应用程序:
- queriedmessage1<-最旧的查询
- 查询消息2
- 查询消息3
- 查询消息4
- 查询消息5<-最新查询
- newmessage1<-在查询后添加
这需要我对查询进行降序排序并在 RecyclerView 的 LayoutManager 上使用 setReverseLayout。然后我需要在开头添加新消息以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)
更改消息在创建时显示的顺序,给我留下如下内容:
- 查询消息5<-最新查询
- 查询消息4
- 查询消息3
- 查询消息2
- queriedmessage1<-最旧的查询
- newmessage1<-在查询后由用户添加
如何区分 onCreate 添加的消息和之后添加的消息以创建我想要的效果?
解决方案
推荐阅读
- c# - 填充一对多对象关系
- react-native - 在导航器的 screenOptions cardStyle 上添加borderTopLeftRadius 和borderTopRightRadius 不起作用
- python - Spark、小型 excel 文件、Pandas 或 Pyspark 以提高性能?
- bootstrap-4 - 隐藏下拉样式按钮 Bootstrap 或使其禁用
- c# - 通过串行 C# 从 Arduino 异步读取数据
- firebase - Firebase 登录问题
- python - 无法使用 Selenium 单击下一步按钮
- javascript - 任何人都可以向我解释为什么我会收到这个错误吗?“未捕获的类型错误
- entity-framework - 我可以在不保存的情况下将记录添加到 EF DBContext 吗?
- c - 在 C 中将 HEX 值转换为 DECimal 值