Я разрабатываю приложение для Android, работающее с базой данных firebase, когда пользователь добавляет элемент в базу данных, приложение отображает его в реальном времени и то, что я хочу, но проблема в том, что один и тот же элемент отображается более одного раза в RecyclerView это код, который я пытаюсь
data = new ArrayList<>();
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("workers");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
e_iv.setVisibility(View.GONE);
e_tv.setVisibility(View.GONE);
rv_all.setVisibility(View.VISIBLE);
for (DataSnapshot ds : snapshot.getChildren()) {
for (DataSnapshot d : ds.getChildren()) {
data.add(d.getValue(work.class));
}
}
mAdapter = new aAdapter(data);
rv_all.setAdapter(allGamesAdapter);
mAdapter.notifyDataSetChanged();
}
Но это не решает эту проблему, и примечание: когда я выхожу из приложения и снова вхожу, оно работает отлично и показывает элементы без повторения кого-либо. Как я могу это решить?
Что происходит, так это то, что ArrayList добавляет данные каждый раз, когда слушатель возвращает данные. Чтобы удалить дубликаты, просто очистите список массивов внутри функции onDataChange().
data = new ArrayList<>();
DatabaseReference myRef =
FirebaseDatabase.getInstance().getReference().child("workers");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
data.clear();
e_iv.setVisibility(View.GONE);
e_tv.setVisibility(View.GONE);
rv_all.setVisibility(View.VISIBLE);
for (DataSnapshot ds : snapshot.getChildren()) {
for (DataSnapshot d : ds.getChildren()) {
data.add(d.getValue(work.class));
}
}
mAdapter = new aAdapter(data);
rv_all.setAdapter(allGamesAdapter);
mAdapter.notifyDataSetChanged();
}
Надеюсь, ваша ошибка исправлена.