我在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;
So if the user has not clicked the undo button during the visible period of the snackbar, then I need to permanently delete the data from database.
对此有何解决方案?
4 回答
据我所知,它是设计的 . 你应该:
用户点击删除按钮后立即删除该项目;
暂时将其存储在类变量中;
如果用户点击撤消,请再次将该项添加到数据库 .
这种方法更安全,更健壮;你不应该等待快餐店被解雇,因为这种行为甚至都不会发生 . 只需考虑用户强制退出应用程序,同时小吃栏仍然打开:该项目是否应删除?这应该 .
伊恩湖的一个更值得信赖的来源是this g+ post . 在评论中,您可以阅读:
Android支持库v23添加了Snackbar.Callback,您可以使用它来监听快餐栏是否被用户解雇或超时 .
借用astinx帖子的例子:
例:
在snackbar.getDuration()时间(100-200ms?)上添加一点可能是一个好主意,因为定时器在时间上不是很精确,这样它们可能会在快餐栏即将关闭之前被调用,虽然在这种情况下可能性相当小 .
如果您不想立即从数据库中删除记录,请尝试以下操作: