item 的拖拽移动

2019-04-24  本文已影响0人  一只有梦想的猫头鹰

一、
定义一个接口

public interface TouchBack {
    void OnDragItem(int fromposition, int toposition);

    void OnDeleteItem(int position);

}

二、
ItemTouchHelper.Callback中的方法,所以我们首先自定义自己的类来继承它,重写其中方法。首先是getMovementFlags()方法,这个方法主要作用是定义移动标识,所以针对拖动效果,我们可以首先定义拖动标识,通过ItemTouchHelper提供的参数来定义

简单来说: 就是 定义 参数 提供拖动标识;

public class SimpTouchback extends ItemTouchHelper.Callback {
    private TouchBack back;

       //利用接口回调    回调内容
    public SimpTouchback(TouchBack back) {
        this.back = back;
    }
    @Override
    public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
        int drag = ItemTouchHelper.DOWN | ItemTouchHelper.UP;   //  上下
        int Delete = ItemTouchHelper.LEFT;    //向左
        return makeMovementFlags( drag, Delete );   //允许上下   向左
    }

    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder1) {
        back.OnDragItem( viewHolder.getAdapterPosition(), viewHolder1.getAdapterPosition() );  //接口回调    回调 item交换的位置
        return true;
    }

    @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {   //在这里可以对itme 做删除
        back.OnDeleteItem( viewHolder.getAdapterPosition() );  
    }

    @Override
    public boolean isItemViewSwipeEnabled() {    //   是否 对拖动效果 进行 屏蔽
        return super.isItemViewSwipeEnabled();   //默认是不会屏蔽
    }

    @Override
    public boolean isLongPressDragEnabled() { //    这个跟上一个方法的意思差不多是否 对拖动效果 进行 屏蔽
        return super.isLongPressDragEnabled();//默认是不会屏蔽
    }
}

三、
在适配中 实现接口 实现重写其中的方法

例如:

    @Override
    public void OnDragItem(int fromposition, int toposition) {
        Collections.swap( list, fromposition, toposition );     //Collections  是一个集合的  工具   swap  交换

        notifyItemMoved( fromposition, toposition );//  简单来说就只刷新这两个位置
    }

    @Override
    public void OnDeleteItem(int position) {
        list.remove( position );         //   删除集合中的位置
        notifyItemRemoved( position );  // 只刷新 删除的位置   
    }

四 、
做完这一系列的 操作 剩下的只有我们的activity了

Myadapter myadapter = new Myadapter( list );   // 这个不用介绍了吧
      mRec.setAdapter( myadapter );  //=_=  
      mRec.setLayoutManager( new LinearLayoutManager( this ) ); //=_=  
      mRec.addItemDecoration( new DividerItemDecoration( this, DividerItemDecoration.VERTICAL ) );  //这个是  给item添加 一条分割线

      SimpTouchback simpTouchback = new SimpTouchback( myadapter );  //这个就是重头戏了     new  出对象    这个就是接口回调的机制了
      ItemTouchHelper itemTouchHelper = new ItemTouchHelper( simpTouchback );// 通过我  小帮手   itemtouchHelper
、、
      itemTouchHelper.attachToRecyclerView( mRec );  // 把我们设置的属性 最终给我们的  Recycler。

上一篇下一篇

猜你喜欢

热点阅读