У меня есть просмотр списка, который получает массив объектов и отображает на экране, этот массив объектов берется из базы данных в firebase, когда я добавляю или удаляю документ (объект) из базы данных, однако просмотр списка обычно обновляется, когда я изменяю одно поле объекта (документ), просмотр списка полностью воссоздает этот объект в представлении и «дублирует» каждый раз при изменении поля состояния.
Это мой код, заполняющий представление списка:
usuarios.orderBy("likes", Query.Direction.DESCENDING);
try {
usuarios.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w("Não consegue", "listen:error", e);
return;
}
for (DocumentChange dc : queryDocumentSnapshots.getDocumentChanges()) {
switch (dc.getType()) {
case ADDED:
Log.d("TAG", "New Msg: " + dc.getDocument().toObject(Doenca.class));
doenca = dc.getDocument().toObject(Doenca.class);
doencaArrayList.add(doenca);
break;
case REMOVED:
Log.d("TAG", "Removed Msg: " + dc.getDocument().toObject(Doenca.class));
doenca = dc.getDocument().toObject(Doenca.class);
doencaArrayList.add(doenca);
break;
case MODIFIED:
// doencaArrayList.remove(doencaArrayList.lastIndexOf(doenca));
Log.d("TAG", "Modified: " + dc.getDocument().toObject(Doenca.class));
doenca = dc.getDocument().toObject(Doenca.class);
doencaArrayList.add(doenca);
break;
}
}
ListView listView = (ListView) root.findViewById(R.id.recyclerViewCadPat);
ArrayAdapter adapter = new DoencaAdapter(getActivity(), doencaArrayList);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
});
}catch (NullPointerException e){
Toast.makeText(getActivity(), "Erro interno", Toast.LENGTH_SHORT).show();
}
Обратите внимание, что есть 3 состояния: одно из: добавление (все в порядке), удаление (все в порядке) и одно изменение (это делает просмотр списка дублирующим объект).