У меня есть ListView, который поставляется с ArrayAdapter объектов Doenca, он получает данные из базы данных Firebase, и всякий раз, когда происходит какое-либо изменение в базе данных, ListView обновляет (Modified Case), однако всякий раз, когда база данных обновляется, экран идет вверх, и я не хочу этого, я хочу, чтобы экран оставался на объекте, видимом на экране в данный момент, есть ли способ сделать это?
Вот код для как заполнен список:
usuarios.orderBy("likes", Query.Direction.DESCENDING).addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w(TAG, "listen:error", e);
return;
}
for (DocumentChange dc : queryDocumentSnapshots.getDocumentChanges()) {
switch (dc.getType()) {
case ADDED:
Log.d(TAG, "New city: " + dc.getDocument().getData());
Doenca doenca = dc.getDocument().toObject(Doenca.class);
doencaArrayList.add(doenca);
break;
case MODIFIED:
Log.d(TAG, "Modified city: " + dc.getDocument().getData());
doencaArrayList.clear();
doenca = dc.getDocument().toObject(Doenca.class);
doencaArrayList.addAll(queryDocumentSnapshots.toObjects(Doenca.class));
break;
case REMOVED:
Log.d(TAG, "Removed city: " + dc.getDocument().getData());
doencaArrayList.clear();
doenca = dc.getDocument().toObject(Doenca.class);
doencaArrayList.addAll(queryDocumentSnapshots.toObjects(Doenca.class));
break;
}
}
ListView listView = (ListView) root.findViewById(R.id.recyclerViewCadPat);
ArrayAdapter adapter = new DoencaAdapter(root.getContext(), doencaArrayList);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
});