android - 火力地堡用户界面 : How to add new message to the top of recycleView

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

我正在使用 Firebase Recycle Adapter 来显示我的消息。我想在回收 View 的顶部显示新收到的消息。 例如 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();

谢谢

最佳答案

您可以将带有时间戳的消息存储到 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/

相关文章:

android - 火力地堡数据库 : Check if node has no children?

swift - 更新 Firebase 数据库

ios - 值保留在数组内部

android - import com.amazonaws 无法解析

c# - 为什么使用 Google Cloud Firestore 1.0.0-beta05 C# SetAsync 时会出现 Grpc.Core.RpcException StatusCode=Unavailable, Detail ="Connect Failed"?

java - 无法在 Activity 之间切换

ios - 使用带有搜索栏的键搜索 Firebase 数据库

firebase - 使用http或database管理firebase实时数据库引用效率更高?

java - Google map 无法获取我的 if 语句以获得权限

android - 覆盖按钮不起作用的文本颜色