Estou criando para estudo um app de chat usando o firebase-real time, na tela onde lista todas as conversas iniciadas aparece a foto,nome,ultima mensagem de quem mandou, o problema esta ae na ultima mensagem, quando o usuario me manda novas mensagens em vez de atualizar ele fica duplicando,nao reconhece que ja tem uma conversa iniciada. segue uma imagem do problema:
https://drive.google.com/file/d/19zuums0PUca_tS8ciMu3j4o6RPmliKJ9/view?usp=sharing
quero deixa igual do whatz que voce consegue ler a ultima mensagem que o usuario mandou,antes de voce clicar para abrir o chat.
Estou usando o addChildEventListener e carregando os itens com o onChildAdded e atualizando com onChildChanged.
onde carrega as conversas
public void RecuperarConversa(){
// listaConversas.clear();
childEventListenerConversas = conversasRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
//Recuperar Conversa
Conversa conversa=dataSnapshot.getValue(Conversa.class);
listaConversas.add(conversa);
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
Conversa conversa=dataSnapshot.getValue(Conversa.class);
Iterator<Conversa> con= listaConversas.iterator();
while (con.hasNext()){
Conversa conValue = con.next();
Log.i("sds","baixo");
if(conValue.equals(conversa))con.remove();
}
listaConversas.add(conversa);
adapter.notifyDataSetChanged();
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
meu adaptador
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Conversa conversa = conversas.get(position);
holder.ultimaMensagem.setText(conversa.getUltimaMensagem());
if(conversa.getIsGroup().equals("true")){
Grupo grupo = conversa.getGrupo();
holder.nome.setText(grupo.getNome());
if(grupo.getFoto()!=null){
Uri uri=Uri.parse(grupo.getFoto());
Glide.with(context)
.load(uri)
.into(holder.foto);
}else{
holder.foto.setImageResource(R.drawable.padrao);
}
}else{
Usuario usuario= conversa.getUsuarioExibicao();
if(usuario!=null){
holder.nome.setText(usuario.getNome());
if(usuario.getFoto()!=null){
Uri uri=Uri.parse(usuario.getFoto());
Glide.with(context)
.load(uri)
.into(holder.foto);
}else{
holder.foto.setImageResource(R.drawable.padrao);
}
}
}
}
peguei isso na net e tentei mais sem sucesso:
Iterator<Conversa> con= listaConversas.iterator();
while (con.hasNext()){
Conversa conValue = con.next();
if(conValue.equals(conversa))con.remove();
}