一尘不染

在小吃店操作中,如何确定从数据库中永久删除软删除的记录是安全的?

java

我正在android中使用Snackbar,并且已经实现了一个操作,以便用户可以撤消该操作(该操作正在清除列表视图中的所有项目)。已经完成将项目删除并添加回列表视图的工作,并且工作正常。

我的问题是,项目存储在sqlite数据库中,如何从表中删除项目?(我怎么知道用户还没有单击撤消按钮,所以我可以从数据库中完全删除数据)。

这是 OnOptionsItemSelcted()中* 的代码 *

case R.id.action_clear:
        final List<Word> temp = new ArrayList<Word>(data);
        data.clear();
        adapter.notifyDataSetChanged();
        View view = findViewById(R.id.layoutFavWords);
        Snackbar.make(view,"Deleted Saved Selection.", Snackbar.LENGTH_LONG).
        setAction("Undo", new OnClickListener() {

            @Override
            public void onClick(View v) {
                for(Word word:temp)
                    data.add(word);
                adapter.notifyDataSetChanged(); 
            }

        }).show();
        break;

因此,如果用户在快餐栏的可见期间未单击“撤消”按钮,那么我需要从数据库中永久删除数据。

有什么解决办法吗?


阅读 193

收藏
2020-12-03

共1个答案

一尘不染

据我所知,这是设计使然。你应该:

  • 用户点击删除按钮后立即删除该项目;
  • 将其临时存储在类变量中;
  • 如果用户点击“撤消”,则将该项目再次添加到数据库中。

这种方法更安全,更可靠。您不应该等待小吃吧被解雇,因为这种动作甚至都不会发生。试想一下,当快餐栏仍处于打开状态时,用户会强制退出该应用程序:是否应删除该项目?这应该。

更值得信赖的消息来源是Ian Lake的g + post(由于G +弃用而被删除)。在评论中,您可以阅读:

您希望您的UI立即做出反应(而不是等到快餐栏消失)-大多数系统(尤其是那些同步到外部服务器的系统)都具有“软删除”的概念,其中将所有内容标记为已删除。在这些情况下,撤消操作将只是取消标记该记录为已删除。即使用户在点心栏完成之前离开应用程序,该系统也能正常工作(您不能假设点心栏将始终完成其动画!)。

最简单的方法是将记录临时保存在其他位置(甚至是局部变量),然后在碰巧单击“撤消”按钮时将其重新插入。

2020-12-03