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的长按事件监听中进行判断调用,