我正在创建具有滑动删除功能的RecyclerView,但是我不知道如何支持撤消操作。
我的数据库是Realm。当我需要删除项目时,我使用:
item.deleteFromRealm()
并将该项目附加到undoList中,当我需要还原它时,我使用:
realm.insert(undoList.last())
但是我发现它是无效的对象。
我知道保存的项目在删除后就无效了。
那我该如何完成撤消功能?
答案 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.