我希望当用户看到消息时,它应该替换传递给看到的文本。但这只有在我回到并再次参加该聊天活动时才会发生。我唯一的问题是当两个用户聊天都打开时如何将“已传递”更新为“已看到”。除此问题外,其他所有工作均正常。可能会通知适配器。 这是我对看到的消息的聊天活动代码:
private void seenMessage(){
messageRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (final DataSnapshot snapshot:dataSnapshot.getChildren()){
rootRef.child("Messages").child(friendUserId).child(currentUID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot1) {
for (DataSnapshot snapshot1:dataSnapshot1.getChildren()){
ChatMessage chatMessage=snapshot1.getValue(ChatMessage.class);
if (chatMessage.getFrom().equals(friendUserId)){
HashMap seen=new HashMap();
seen.put("isseen",true);
snapshot.getRef().updateChildren(seen);
snapshot1.getRef().updateChildren(seen);
chatMessageAdapter.notifyDataSetChanged();
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
chatMessageAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
我的适配器代码在这里
if (userMessageList.size()-1==i){
if (message.isIsseen()){
chatMessageViewHolder.seenStatus.setText("Seen");
}
else {
chatMessageViewHolder.seenStatus.setText("Delivered");
}
}
else {
chatMessageViewHolder.seenStatus.setVisibility(View.GONE);
}
答案 0 :(得分:1)
将addListenerForSingleValueEvent
替换为addValueEventListener
处的messageRef
,因为第一个侦听器仅触发一次以侦听该引用处的值,所以它只会通知您的适配器一次,而不是,第二个将继续侦听该引用是否有任何更改,并且您将在不离开活动的情况下实时看到更改,因为只要在该引用进行更改,适配器都会收到通知。