代码之家  ›  专栏  ›  技术社区  ›  john

Firebase UI:如何将新消息添加到recycleView顶部

  •  1
  • john  · 技术社区  · 7 年前

    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();
    

    1 回复  |  直到 7 年前
        1
  •  2
  •   Gastón Saillén Michael Lehenbauer    7 年前

    您可以将带有时间戳的消息存储到Firebase中,然后在检索消息的所有数据时,将其与其余消息进行比较,并按日期进行排序,它们将显示在最新消息的顶部,或者只是将 RecyclerView 您将在页面顶部看到最新消息 回收视图

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    linearLayoutManager.setReverseLayout(true);
    linearLayoutManager.setStackFromEnd(true);
    myRecyclerView.setLayoutManager(linearLayoutManager);
    

    编辑

     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());
    

    回收视图

    如果您已经在查询中创建了另一个orderByChild,并且不能执行多次,则可以执行上述排序。

    但是,正如弗兰克所建议的那样,用它来做会更有效率 orderByChild

    Query query = rootRef.child("messages").child(messageSenderId).child(messageReceiverId).orderByChild("timestamp");