Как восстановить предмет, удаленный из Realm? - PullRequest
0 голосов
/ 18 сентября 2018

Я создаю RecyclerView с возможностью удаления, но я понятия не имею, как поддерживать операцию отменить .

Моя база данных - Realm.Когда мне нужно удалить элемент, я использую:

item.deleteFromRealm()

и добавляю элемент в список отмены, когда мне нужно восстановить его, я использую:

realm.insert(undoList.last())

, но я обнаружилэто недопустимый объект.

Я знаю, что сохраненный элемент стал недействительным, когда я его удалил.

Так, как я могу выполнить функцию отмены?

1 Ответ

0 голосов
/ 18 сентября 2018

Вы должны просто , а не удалить объект из области, или, по крайней мере, не сейчас.

Одна идея состоит в том, чтобы добавить к этому объекту настраиваемое поле, что-то вродеboolean askedForDeletion; (и его установщик и получатель).

Затем, когда вы захотите удалить его, просто переключите это поле в false, добавьте его в список отмены и попросите RecyclerView перезагрузить:

item.setAskedForDeletion(false); 
undoList.add(item);
recyclerView.notifyDataSetChanged();

Теперь, конечно, набор данных RecyclerView должен фильтровать элементы в соответствии с этой переменной.Где-то в коде вы просите Realm дать вам предметы.Если у вас есть что-то вроде:

realm.where([Item].class).findAll();

, вам следует обновить его с помощью:

realm.where([Item].class).equalTo("askedForDeletion", false).findAll();

, чтобы вы получили только не удаленные.

Наконец: решитемомент, когда приложение должно удалить «список отмен».Может быть, «onDestroy», или где-то, где вы уверены, что пользователь не будет грустно, чтобы быть не в состоянии отменить больше.Там вы должны удалить все элементы, которые запрашивали удаление:

realm.where([Item].class).equalTo("askedForDeletion", true).findAll(); // And delete them as you prefer.
...