如何撤消从Room数据库中删除

时间:2019-08-03 14:49:48

标签: android android-room

当尝试通过在删除回收项目之前对其进行缓存来轻刷回收项目时,我正在尝试在快餐栏上实现撤消删除,并且如果单击撤消,则应从缓存中将项目添加到recyclerview中。

或者是否有更好的方法来实现这一目标。

这是我当前的代码

@Override
    public void onSwiped(@NonNull final RecyclerView.ViewHolder viewHolder, int direction) {

        viewModel = ViewModelProviders.of(Objects.requireNonNull(getActivity())).get(ViewModel.class);
        viewModel.getAllAppointments().observe(getViewLifecycleOwner(), new Observer<List<Appointments>>() {
            @Override
            public void onChanged(List<Appointments> appointments) {
                mAdapter.submitList(appointments);
            }
        });

        Snackbar.make(Objects.requireNonNull(getView()), "Appointment deleted", Snackbar.LENGTH_LONG)
                    .setAction("UNDO", new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            //undo delete
                        }
                    })
                    .setActionTextColor(getResources().getColor(R.color.colorPrimaryDark))
                    .addCallback(new Snackbar.Callback(){
                        @Override
                        public void onDismissed(Snackbar snackbar, int event) {
                            super.onDismissed(snackbar, event);

                            if (event == DISMISS_EVENT_TIMEOUT || event == DISMISS_EVENT_SWIPE
                                    || event == DISMISS_EVENT_CONSECUTIVE || event == DISMISS_EVENT_MANUAL) {
                                viewModel.delete(mAdapter.getAppointAt(viewHolder.getAdapterPosition()));
                            }
                        }
                    })
                    .show();
    }

1 个答案:

答案 0 :(得分:1)

为此,您可以在onClick按钮上调用show快餐栏,因此在结束时间快餐栏上调用删除功能(从适配器,列表,数据库或数据源中删除),因此在此时间之前,可以暂时从适配器中删除项目仅适用于相似的动画(不能从列表中删除),并且如果用户单击“撤消”按钮从数据库或您的数据源中刷新列表