简书地址:https://www.jianshu.com/p/8b6b8aab3837
前言
在RecyclerView中使用ItemTouchHelper可以轻松实现列表交换顺序的效果,基本用法就不说了,大家百度Google一下满大街都是。对于仅仅是列表的情况,无论是实现上下滑动拖拽还是左右滑动拖拽,ItemTouchHelper都能轻松应对。
但是当我将RecyclerView放入RefreshLayout(第三方控件或者SwipeRefreshLayout)中时,就产生了滑动冲突,是因为刷新控件本身就会监听我们的RecyclerView的滑动并在下滑时添加刷新头,而我们的 ItemTouchHelper 也会监听 RecyclerView 的滑动,当我长按触发拖拽再继续下拉拖拽,刷新头就出现了,这就是在竖直方向的拖拽情况下,两者产生的冲突。
解决
要解决无非就是在拖拽开启时将刷新控件的 enabled 属性置为 false ,在拖拽结束时将enabled 再置为 true ,刚开始我并没有找到 ItemTouchHelper 的对应拖拽开启的方法,但是可以使用 onSelectedChanged + actionState 来解决我们的问题
看看onSelectedChanged方法
```
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
super.onSelectedChanged(viewHolder, actionState)