Listview автоматически поднимается в верхнюю часть экрана после изменения данных - PullRequest
0 голосов
/ 20 января 2020

У меня есть 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();
            }
        });
...