首页 > 解决方案 > 使用 SnapshotListener 在 ArrayList 的开头插入新的 Firestore 文档会翻转查询 onCreate 的顺序

问题描述

我正在尝试使用 Firestore 查询和更新聊天消息列表,该列表将在底部显示固定数量(本例中为 5)的最新查询消息,按时间戳向上递减,并在查询后添加消息下面是相同的顺序,就像一个典型的聊天应用程序:

这需要我对查询进行降序排序并在 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)更改消息在创建时显示的顺序,给我留下如下内容:

如何区分 onCreate 添加的消息和之后添加的消息以创建我想要的效果?

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


推荐阅读