我正在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;
因此,如果用户在快餐栏的可见期间未单击“撤消”按钮,那么我需要从数据库中永久删除数据。
有什么解决办法吗?
据我所知,这是设计使然。你应该:
这种方法更安全,更可靠。您不应该等待小吃吧被解雇,因为这种动作甚至都不会发生。试想一下,当快餐栏仍处于打开状态时,用户会强制退出该应用程序:是否应删除该项目?这应该。
更值得信赖的消息来源是Ian Lake的g + post(由于G +弃用而被删除)。在评论中,您可以阅读:
您希望您的UI立即做出反应(而不是等到快餐栏消失)-大多数系统(尤其是那些同步到外部服务器的系统)都具有“软删除”的概念,其中将所有内容标记为已删除。在这些情况下,撤消操作将只是取消标记该记录为已删除。即使用户在点心栏完成之前离开应用程序,该系统也能正常工作(您不能假设点心栏将始终完成其动画!)。 最简单的方法是将记录临时保存在其他位置(甚至是局部变量),然后在碰巧单击“撤消”按钮时将其重新插入。
您希望您的UI立即做出反应(而不是等到快餐栏消失)-大多数系统(尤其是那些同步到外部服务器的系统)都具有“软删除”的概念,其中将所有内容标记为已删除。在这些情况下,撤消操作将只是取消标记该记录为已删除。即使用户在点心栏完成之前离开应用程序,该系统也能正常工作(您不能假设点心栏将始终完成其动画!)。
最简单的方法是将记录临时保存在其他位置(甚至是局部变量),然后在碰巧单击“撤消”按钮时将其重新插入。