Когда я запускаю это действие, он записывает видимые объекты списка в массив, но когда я прокручиваю вниз и возвращаюсь вверх, он снова дублирует элементы в массив.Как это исправить?Чтобы элемент был добавлен только один раз.
Я пытался установить , но получил ту же проблему.
private void displayMessages(){
final Set<ChatMessage> mSet= new HashSet<ChatMessage>();
mChat = new ArrayList<>();
mDBRootRef.child("messages").child(messageSenderId).child(messageReceiverId)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren() ) {
ChatMessage chat = snapshot.getValue(ChatMessage.class);
mSet.add(chat);
}
mChat.clear();
mChat.addAll(mSet);
MessageAdapter messageAdapter = new MessageAdapter(ChatActivity.this, mChat);
mUserMessagesListRV.setAdapter(messageAdapter);
}
Я также пытался .addChildEventListener вместо. addValueEventListener , но возникает та же проблема.
Вот инициализация recycyleview.
mUserMessagesListRV = (RecyclerView) findViewById(R.id.recyclerview_chat_log);
mUserMessagesListRV.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
linearLayoutManager.setStackFromEnd(true);
mUserMessagesListRV.setLayoutManager(linearLayoutManager);
Вот метод onBindViewHolder.
@Override
public void onBindViewHolder(@NonNull MessageAdapter.ViewHolder viewHolder, int position) {
//mChat is a list declared as private List<ChatMessage> mChat;
ChatMessage chat = mChat.get(position);
viewHolder.showMessage.setText(chat.getMessageText());
}