当前位置: 首页 > 知识库问答 >
问题:

RecycerView中的确认和撤消删除

裘丰
2023-03-14
public class TripsAdapter extends RecyclerView.Adapter<TripsAdapter.VerticalItemHolder> {
    private List<Trip> mTrips;
    private Context mContext;
    private RecyclerView mRecyclerView;

    [...]

    //Let adapter know his RecyclerView. Attaching ItemTouchHelper
    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new TripItemTouchHelperCallback());
        itemTouchHelper.attachToRecyclerView(recyclerView);
        mRecyclerView = recyclerView;
    }

    [...]

    public class TripItemTouchHelperCallback extends ItemTouchHelper.SimpleCallback {
        public  TripItemTouchHelperCallback (){
            super(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.RIGHT);
        }

        @Override
        public boolean onMove(RecyclerView recyclerView,
                              RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            //some "move" implementation
        }
        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
            //AND WHAT HERE?
        }
    }
}

很管用。然而,我也需要执行一些撤消操作或确认。做这件事最好的方法是什么?

第一个问题是如何插入另一个视图代替删除与确认对话框?如果用户选择撤消删除,如何恢复被刷的项目?

共有1个答案

东门子昂
2023-03-14

我同意@Gabor的观点,最好软删除项目并显示撤消按钮。

然而,我使用Snackbar来显示撤消。对我来说更容易实现。

我将适配器和RecycerView实例传递给ItemTouchHelper回调。我的onSwiped很简单,大部分工作是由适配器完成的。

@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
    mAdapter.onItemRemove(viewHolder, mRecyclerView);
}
   public void onItemRemove(final RecyclerView.ViewHolder viewHolder, final RecyclerView recyclerView) {
    final int adapterPosition = viewHolder.getAdapterPosition();
    final Photo mPhoto = photos.get(adapterPosition);
    Snackbar snackbar = Snackbar
            .make(recyclerView, "PHOTO REMOVED", Snackbar.LENGTH_LONG)
            .setAction("UNDO", new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int mAdapterPosition = viewHolder.getAdapterPosition();
                    photos.add(mAdapterPosition, mPhoto);
                    notifyItemInserted(mAdapterPosition);
                    recyclerView.scrollToPosition(mAdapterPosition);
                    photosToDelete.remove(mPhoto);
                }
            });
    snackbar.show();
    photos.remove(adapterPosition);
    notifyItemRemoved(adapterPosition);
    photosToDelete.add(mPhoto);
}
    null
 类似资料:
  • Git提供了多种修复你开发过程中的错误的方法. 方法的选择取决于你的情况: 包含有错误的文件是否提交了(commited); 如果你把它已经提交了, 那么你是否把有错误的提交已与其它人共享这也很重要. 修复未提交文件中的错误(重置) 如果你现在的工作目录(work tree)里搞的一团乱麻, 但是你现在还没有把它们提交; 你可以通过下面的命令, 让工作目录回到上次提交时的状态(last commi

  • Revert 命令可以撤消之前做过的某个提交。 练习 1,先查看一下项目的提交历史: → git log --oneline fb11f83 让 README.md 标题的首字母大写 0fd9dac 让标题微笑 7086650 添加 .gitignore b5773ad 设置相关资源文档标题 23f3c2b 添加相关资源文档 a454700 设置说明文档的标题 39975b3 初始化 “添加 .

  • 我实现了一个Java使用者,它使用来自Kafka主题的消息,然后将这些消息与POST请求一起发送到REST API。 假设一个消息已经被使用,但是Java类未能到达REST API。消息将永远不会被传递,但它将被标记为已消耗。处理这类案件最好的办法是什么?当且仅当来自REST API的响应成功时,我能以某种方式确认消息吗?

  • 我正面临一个问题,我无法删除RecycerView中的一个项目。我试图在互联网上搜索,但无法看到任何解决方案,我遵循这篇文章Android Recycerview添加和删除项目,但我仍然无法删除下面选择的项目是我的适配器和碎片的代码 RecyclerViewAdapter.java

  • 问题内容: 我目前正在使用Oracle Database Express Edition 11g处理一些选项。考虑下面的小代码示例,其中一些用户向其他用户授予某些特权: 用户A是表T的创建者,并执行以下操作。 现在执行。因为没有指定约束,则操作要么取消,否则将有一个废弃的特权,或同时删除的权限和。 现在我的问题是:该语句是否实际上已取消或同时删除和特权?或者换句话说,就是执行该revoke语句,无

  • 问题内容: 我正在实现撤消/重做功能,这需要我使用记忆模式。 局部程序的流程:“ …该程序然后使用Memento模式存储先前的Vector,然后将新创建的对象添加到Vector。此后,用户可以选择show命令来显示Vector内部的内容。 ,他还可以输入undo命令来还原,还原可以重复进行,直到还原到原始状态为止。” 从我的研究中,我知道将会有一个创始者,纪念品和看守。 这是我的看守程序 不幸的是