实现recycleview水平拖拽排序
2020-05-20 本文已影响0人
阿里高级软件架构师
今天我面试,面试官给了我一个需求,就是实现视频帧列表拖拽排序,网上的都是网格排序啊,或者垂直排序,也没有什么水平排序的资料,其实你根据逻辑,可以思考一下思路,我的思路如下:
1、首先你得建立一个适配器,去装填数据,而且排列方式是水平的
2、然后就得考虑一下事件的处理,因为拖拽的是recycleview的item,recycleview里面包含了一个工具类:ItemTouchHelper,你需要实现下面几个方法:
getMovementFlags:这个是item移动的flag,就是判断item的拖拽方向
onMove:这个方法是获取在移动中的事件
onSelectedChanged:item长按选择(主要是为了提示用户你选择了当前的item)
clearView:取消长按(为了恢复原状)
当你new了这个类,需要和recycleview进行绑定,截屏一下源码:
这个方法是为了将当前内存中的recycleview进行绑定,因为后面要实现这个类里面的接口,进行对应的拖拽操作
我们先从简单的讲起:
这个前面也说过,提示用户选择当前模块,调用手机震动
这个是恢复后,保持排列,不会使数据错乱。之所以调用notifyDataSetChanged(),是为了刷新数据,让列表数据不会错乱
最重要的来了,当你选中item然后实现拖动,就会触发这个事件。一个是被移动的item,另一个是要被装填的item;当被移动的位置在被装填位置的前面,那就递增寻找位置,进行数据的重新置换排列,反之就递减循环,最后面再刷新一下位置,如果你不刷新,那就是两个item层叠,错位