Удалить объект из списка на удаленном дочернем Android - PullRequest
0 голосов
/ 19 марта 2019

У меня есть arrayList объектов класса. Этот класс содержит данные, полученные от Firebase.

но я хочу удалить объект из списка, когда дочерний элемент удален в firebase, но два объекта не совпадают, поскольку снимок создает новый объект класса, содержащий те же данные. Вот код того, что я реализовал:

posts = new ArrayList<>();

        childEventListener= new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                posts.add(dataSnapshot.getValue(GalleryPostModel.class));
                unapprovedAdapter.notifyDataSetChanged();
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
                posts.remove(dataSnapshot.getValue(GalleryPostModel.class));
                unapprovedAdapter.notifyDataSetChanged();
            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        };

        UnApprovedDbRef.addChildEventListener(childEventListener);

Так как мне подойти к этой проблеме? что я могу сделать, чтобы удалить его из списка. Я мог бы выполнить линейный поиск в списке, но когда список станет огромным, эта задача станет очень трудоемкой. (Невозможно использовать .removeIf, поскольку для него требуется минимальный уровень API 24, но минимальное API моего приложения - 22)

1 Ответ

0 голосов
/ 19 марта 2019

Чтобы иметь возможность удалить предмет, вы должны сохранить его ключ в дополнение к сохранению значения.

Итак, вы создаете список дополнений для ключей:

keys = new ArrayList<String>();

А затем в onChildAdded добавьте ключ снимка в этот список:

public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
    posts.add(dataSnapshot.getValue(GalleryPostModel.class));
    keys.add(dataSnapshot.getKey());
    unapprovedAdapter.notifyDataSetChanged();
}

Теперь вы можете найти ключ в onChildRemoved, что намного быстрее, чем поиск сообщения / значения:

public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
    int index = keys.indexOf(dataSnapshot.getKey());
    posts.remove(index);
    keys.remove(index);
    unapprovedAdapter.notifyDataSetChanged();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...