如何恢复从Realm中删除的项目?

时间:2018-09-18 10:47:12

标签: android android-recyclerview realm

我正在创建具有滑动删除功能的RecyclerView,但是我不知道如何支持撤消操作。

我的数据库是Realm。当我需要删除项目时,我使用:

item.deleteFromRealm()

并将该项目附加到undoList中,当我需要还原它时,我使用:

realm.insert(undoList.last())

但是我发现它是无效的对象。

我知道保存的项目在删除后就无效了。

那我该如何完成撤消功能?

1 个答案:

答案 0 :(得分:0)

您应该从Realm中删除对象,或者至少暂时不删除。

一个想法是向该对象添加一个自定义字段,类似于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.