RecyclerView拖拉拽

RecyclerView拖拉拽,主要是使用RecyclerView结合ItemTouchHelper来实现的。

首先添加创建 ItemTouchHelper(new ItemTouchHelper.Callback() )对象,然后通过ItemTouchHelper调用attachToRecyclerView方法把RecyclerView控件放进去。

 ItemTouchHelper构造方法中需要一个CallBack对象,适用于拖拽或者剔除时的回调方法,所以我们主要是要重写CallBack中的相应方法,处理响应的逻辑

  首先来自定义一个CallBack类,继承与ItemTouchHepler.Callback()对象,重写3个重要方法,getMovementFlags(),onMove(), onSwiped().

getMovementFlags():这个方法是设置是滑动时间,以及拖拽的方向,所以在这里需要判断一下是列表布局还是网格布局,如果是列表布局的话则拖拽方向为DOWN和UP,如果是网格布局的话则是DOWN和UP和LEFT和RIGHT

onMove():在我们拖动的时候他会不断回调这个方法,在这里我们需要将正在拖拽的item和集合的item,通过getAdapterPosition()获取出来,然后进行交换,然后在通知适配器更新数据。

onSwiped()是替换后调用的方法,也可以不用管。

然后我们希望在拖拽的时候将被拖拽的Item高亮,这样用户体验要好很多,所以我们要重写CallBack对象中的onSelectedChanged()和clearView()方法,在onSelectedChanged()方法中设置选中长按Item的时候设置调背景色,在clearView()方法中设置完成的时候移除高亮背景色

但是实际功能中有可能存在,排头前两个的不需改变它的顺序,即有些item允许拖拽,有些则不允许,所以我们需要重写isLongPressDragEnabled()方法,return false.不允许长按拖拽,然后在reclcler的长按事件监听中进行判断调用,

你可能感兴趣的:(RecyclerView拖拉拽)