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
答
您必须在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
我更新了我的问题,添加了一些代码 –
欢迎来到堆栈溢出。当问一个问题时,我们要求你发布你的代码,并在适用的地方尝试过。这会给你最好的帮助。您可能会发现这篇文章有用:https://stackoverflow.com/help/how-to-ask – JCooke