Android群聊只显示空的listview没有旧消息只是当用户加入群组的新消息

Android群聊只显示空的listview没有旧消息只是当用户加入群组的新消息

问题描述:

ISo我在我的应用程序中有群聊。我有“房间”和按钮加入“房间”,当用户点击加入按钮时,所有的旧消息都出现在屏幕上,但我只想显示新的消息,我正在使用Firebase列表适配器来显示......一切正常,但只是不要不知道如何显示空白列表和只有新消息,ty。Android群聊只显示空的listview没有旧消息只是当用户加入群组的新消息

 btnJoin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      DatabaseReference db = FirebaseDatabase.getInstance().getReference("EventsUsers").child(uniqEventID); 
      db.child(user.getUid()).setValue(""); 


     } 
    }); 

    btnSend.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      DatabaseReference db = FirebaseDatabase.getInstance().getReference("EventsUsers").child(uniqEventID).child("Messages").push(); 
      db.setValue(new ChatMessage(ePlain.getText().toString(),user.getDisplayName())); 
      ePlain.setText(""); 
      ePlain.requestFocus(); 

     } 
    }); 
    private void displayChat() { 
    btnSend.setVisibility(View.VISIBLE); 
    eventChat.setVisibility(View.VISIBLE); 
    FirebaseListAdapter<ChatMessage> adapter = new FirebaseListAdapter<ChatMessage>(EventDetails.this,ChatMessage.class,R.layout.one_chat_list,FirebaseDatabase.getInstance().getReference("EventsUsers").child(uniqEventID).child("Messages")) { 
     @Override 
     protected void populateView(View v, ChatMessage model, int position) { 
      TextView messageTextm,messageUser,messageTime; 
      messageTextm = (TextView) v.findViewById(R.id.chatMessage); 
      messageUser = (TextView)v.findViewById(R.id.chatUserName); 
      messageTime = (TextView)v.findViewById(R.id.message_time); 

      messageTextm.setText(model.getMessageText()); 
      messageUser.setText(model.getMessageUser()); 
      messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm)", model.getMessageTime())); 

     } 
    }; 
    eventChat.setAdapter(adapter); 

} 
    DatabaseReference check = FirebaseDatabase.getInstance().getReference("EventsUsers").child(uniqEventID); 
      check.addListenerForSingleValueEvent(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        if(dataSnapshot.hasChild(user.getUid())){ 
         displayChat(); 
        } 
       } 

因此,当用户点击加入有消息显示按钮列表视图与所有旧的邮件,他加入之前...和抱歉没有上传任何代码,我是新来的,告诉我,如果你需要别的东西我的代码 这是我的数据库结构https://ibb.co/d47D9v

+0

欢迎来到堆栈溢出。当问一个问题时,我们要求你发布你的代码,并在适用的地方尝试过。这会给你最好的帮助。您可能会发现这篇文章有用:https://*.com/help/how-to-ask – JCooke

您必须在Firebase中记录时间。首先,您需要跟踪消息的发布时间,其次,您需要跟踪用户何时加入会议室。然后,当你查询的信息,您可以

sortBy('time').startAt(timeUserJoined)

编辑 在您的按钮加入的onClick你

FirebaseDatabase.getInstance().getReference("EventsUsers") 
    .child(uniqEventID).child(user.getUid()).setValue(""); 

的值设置为当前时间,而不是仅仅增加一个空节点作为一面旗帜。

然后,当您添加消息时,您还需要添加它添加的时间。所以只需添加这对你已经取得

db.setValue(new ChatMessage(ePlain.getText().toString(), 
    user.getDisplayName()), System.currentTimeMillis()); 

最后,在您的适配器类,你的参考应该更像

FirebaseDatabase.getInstance().getReference("EventsUsers") 
    .child(uniqEventID).child("Messages") 
    .orderBy("time").beginAt(timeUserJoined) 

timeUserJoined是价值的用户的ID从上面

的关键
FirebaseDatabase.getInstance().getReference("EventsUsers").child(uniqEventID) 
    .setSingleValueListener(result-> timeUserJoing = result.value) 

这不是完美的代码,但我认为你得到的点

+0

我更新了我的问题,添加了一些代码 –