Мой адаптер не обновляет значение, пока я не вернусь, а затем снова вернусь к этой деятельности. В чем причина - PullRequest
0 голосов
/ 24 июня 2019

Я хочу, чтобы, когда пользователь видел сообщение, оно должно было заменить текст с доставленного на увиденное.Но это происходит только тогда, когда я возвращаюсь и снова возвращаюсь к этому чату.Моя единственная проблема заключается в том, как обновить «доставлено» до «увиденного», когда открыт чат обоих пользователей.Все остальные рабочие в порядке, кроме этой проблемы. Может быть адаптер не уведомляет.вот мой код активности чата для увиденных сообщений:

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

1 Ответ

1 голос
/ 24 июня 2019

Замените addListenerForSingleValueEvent на addValueEventListener на вашем messageRef, так как первый слушатель просто запускает один раз, чтобы прослушать ваше значение по этой ссылке, он просто один раз уведомит ваш адаптер, вместо этого второй продолжит слушатьесли есть какие-либо изменения по этой ссылке, и вы увидите изменение в реальном времени, не выходя из действия, так как адаптер будет уведомляться при каждом изменении по этой ссылке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...