美文网首页
实现item上下滑动改变位置,左右滑动进行删除

实现item上下滑动改变位置,左右滑动进行删除

作者: 龙_君 | 来源:发表于2019-07-16 19:38 被阅读0次

    TouchCallBack 接口:

    public interface TouchCallBack {
    //数据交换
    void onItemMove(int fromPosition ,int toPosition);
    
    //数据删除
    void onItemDelete(int position);
    }
    

    在adapter中重写以下两个方法:
    (注:adapter 需要实现 ouchCallBack)

    public void onItemMove(int fromPosition,int toPosition){
        //通过集合工具类交换位置
        Collections.swap(list,fromPosition,toPosition);
        //局部刷新
        notifyItemMoved(fromPosition,toPosition);
    }
    
    @Override
    public void onItemDelete(int position) {
          //数据库进行删除
        DbDailyBean dbDailyBean = list.get(position);
        boolean delete = DataUtilDao.getDataUtilDao().delete(dbDailyBean);
    
        //数据库进行判断是否删除成功
        if (delete){
            //删除数据
            list.remove(position);
            //局部刷新(移除)
            notifyItemRemoved(position);
            notifyItemRangeChanged(position,list.size() - 1);
    
            ToastUtil.showLong("删除成功");
        }else{
            ToastUtil.showLong("删除失败");
        }
    }
    

    在MyActivity中的initView方法中写:

    //自定义处理类,
        // callback回调:上下拖动和左右移动的事件触发
        //callback回调中,调用适配器类的具体实现处理交换功能
        SimpleItemTouchHelperCallBack helper = new SimpleItemTouchHelperCallBack(adapter);
        //ItemTouchHelper系统辅助类,赋值需要一个ItemTouchHelper.callback对象,自定义处理类
        ItemTouchHelper touchHelper = new ItemTouchHelper(helper);
        //关联一个RecyclerView
        touchHelper.attachToRecyclerView(mCollectRlv);
    

    自定义处理类实现上下左右滑动:

     public class SimpleItemTouchHelperCallBack extends ItemTouchHelper.Callback {
    
    private TouchCallBack touchCallBack;
    
    public SimpleItemTouchHelperCallBack(TouchCallBack touchCallBack) {
        this.touchCallBack = touchCallBack;
    }
    
    
    
    @Override
    public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
       //允许上下移动
        int drag = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
    
        //允许左移动
        int swip = ItemTouchHelper.LEFT ;
        //允许右移动
         int right = ItemTouchHelper.RIGHT;   
    
        return makeMovementFlags(drag,swip);(将swipe替换成right就可以右移动删除了)
    }
    
    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
        touchCallBack.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
        return true;
    }
    
    
    
    @Override
      public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
        touchCallBack.onItemDelete(viewHolder.getAdapterPosition());
    }
    

    希望可以帮到大家@_@ !

    相关文章

      网友评论

          本文标题:实现item上下滑动改变位置,左右滑动进行删除

          本文链接:https://www.haomeiwen.com/subject/rtcxlctx.html