RecyclerView拖动及拖动后position错乱问题
之前在做一个App自定义顺序的功能,用户需要拖动App到自己想要的位置,刚开始一切都写好之后,拖动么有问题当排序之后发现位置完全错乱了,根本不是我们想要的顺序,所以今天就把这个坑分享出来,也给自己做个记录。
定义接口记录拖动前后的位置:
public interface ItemTouchHelperAdapter {//数据交换前后位置void onItemMove(int fromPosition, int toPosition);}
实现接口:
public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback {private ItemTouchHelperAdapter mAdapter;private boolean sort = false;public SimpleItemTouchHelperCallback(ItemTouchHelperAdapter adapter) {mAdapter = adapter;}/** 用于返回可以滑动的方向* */@Overridepublic int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT; //允许上下左右的拖动int swipeFlags = 0; //不允许侧滑return makeMovementFlags(dragFlags, swipeFlags);}/** 当用户拖动一个Item进行上下移动从旧的位置到新的位置的时候会调用该方法* */@Overridepublic boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {mAdapter.onItemMove(viewHolder.getAdapterPosition(),target.getAdapterPosition());return true;}/** 当用户左右滑动Item达到删除条件时,会调用该方法* */@Overridepublic void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {}//设置item是否可以拖动public void setSort(boolean sort) {this.sort = sort;}/** 该方法返回true时,表示支持长按拖动,即长按ItemView后才可以拖动 默认返回true* */@Overridepublic boolean isLongPressDragEnabled() {return sort;}/** 该方法返回true时,表示如果用户触摸并左右滑动了View,* 那么可以执行滑动删除操作,即可以调用到onSwiped()方法。默认是返回true* */@Overridepublic boolean isItemViewSwipeEnabled() {return false;}}
RecyclerView的adapter 实现 ItemTouchHelperAdapter 接口 重写onItemMove方法:
重要的代码来了,是他,是他,就是他,看下面
@Overridepublic void onItemMove(int fromPosition, int toPosition) {if (fromPosition < toPosition) {//从上往下拖动,每滑动一个item,都将list中的item向下交换,向上滑同理。for (int i = fromPosition; i < toPosition; i++) {Collections.swap(mList, i, i + 1);//交换数据源两个数据的位置}} else {for (int i = fromPosition; i > toPosition; i--) {Collections.swap(mList, i, i - 1);//交换数据源两个数据的位置}}//更新视图notifyItemMoved(fromPosition, toPosition);}
判断拖动前后position的大小,交换位置这样就保证在拖动前后位置不错乱了
因为重写的 ItemTouchHelper.Callback 中的 onMove方法是在拖动的时候实时触发的 所以我们自定义的onItemMove方法也是实时调用的,所以item的position也是实时交换的
最后一步 就是在我们的activity中 设置就ok了
recyclerAdapter = new AppSortRecyclerAdapter(list,this);recycler.setAdapter(recyclerAdapter);//先实例化Callbackcallback = new SimpleItemTouchHelperCallback(recyclerAdapter);//用Callback构造ItemtouchHelpertouchHelper = new ItemTouchHelper(callback);//调用ItemTouchHelper的attachToRecyclerView方法建立联系touchHelper.attachToRecyclerView(recycler);
对对对 就这样设置一下,就ok了 拖动之后你可以重新遍历一遍看看是不是position也变化了,反正我的是变化了,希望可以帮助到刚接触这块的大佬们
大佬们再见,下次有坑再来分享给大家!!!
RecyclerView拖动及拖动后position错乱问题相关推荐
- 安卓P 自动调节亮度打开的状态下,手动拖动亮度条后,自动调节亮度失效
客户反馈:自动调节亮度打开的状态下,手动拖动亮度条后,自动调节亮度失效 分析:这个是正常现象,用户手动调节后,不再自动调节亮度:但是客户不要这个效果,要求自动调节亮度一直生效. 关于自动调节亮度流程主 ...
- krpano场景拖动时拖动惯性消失的问题
问题背景:在写一个基于krpano的全景项目时突然发现场景拖动时拖动惯性消失了.查看官方文档,检查和控制相关的control标签的参数没有问题,并且也一直没有修改过. 排查过程:推测为某插件调用了相关 ...
- 解决:RecyclerView 滑动后布局错乱
一.问题说明 我的需求是要做一个类似这样的列表,整体是一个 RecyclerView,每个 item 内部会有一个流式布局,在流式布局内部会动态添加 TextView,TextView 的大小是自适应 ...
- 悬浮View,可拖动,放手后自动吸附到屏幕边上。
悬浮View,应用内悬浮 本章给大家介绍自定义悬浮View,可随手指拖动,手指放开后会自动吸附到手机屏边缘,悬浮View内的Content布局可以任意放入自定义的布局,非常方便. 效果图: 核心部分是 ...
- 解决微信小程序使用css滤镜filter后position fixed错乱
最近给wechat小程序设置灰色页面,给page标签使用灰色滤镜后导致position fixed位置错乱,无法正确定位,样式错乱 解决方案: 不对page view标签设置滤镜filter,只对 t ...
- android RecyclerView 添加可拖动的滚动条
实现的效果图如下,为了效果这里我设置的宽了一些,实际根据需求修改即可 先说几个属性: android:scrollbars" 一般都是垂直的滚动条设置vertical android:scr ...
- android点赞刷新列表图片闪烁,RecyclerView使用——有效解决刷新数据错乱,图片闪烁,OOM问题...
做项目时,用到RecyclerView去加载1w张图片,为了防止OOM,需要进行分页预加载;这些完成后测试发现刷新recyclerView会造成数据错乱,在查阅资料得到一下的解决方法. 根据网上资料: ...
- html5 table的表头拖动,可拖动table表头的实现
前言 自己做的项目碰到这样一个需求,就是对所有的表格添加表头可以拖动的效果.我一想,这不简单,分分钟钟给你做出来.拿起我的电脑,啪啪啪就敲起来了. 一定是哪里不对,以我的聪明才智,结果应该不是这样的, ...
- Android UI控件之Gallery(拖动效果) --拖动式图片浏览
我们知道现在智能手机上都有这样一种功能,就是你在浏览图片的时候.不是硬性的点击按钮 而是可以实现手指的拖动,划开效果.使用户具有更好的交互体验,不过这种效果是如何实现的呢? 在Android中是通过G ...
最新文章
- 安卓MP3播放器开发实例(1)之音乐列表界面
- 使用 BOOST_PROTO_DEFINE_OPERATORS 使用非原型类型 std::vector<> 对表达式进行原型化的示例
- WebAPI(part2)--获取元素
- android studio初始化设置,Android studio 初始设置
- COS系统的前端演变和发展
- android 天气接口简书,天气API接口说明
- mysql sql%rowcount_sql%rowcount 返回影响行数
- 使用FileUpload上传图片到数据库
- 那些相见恨晚的 JavaScript 技巧
- T(n) = 25T(n/5)+n^2的时间复杂度?
- 笔记本计算机故障排除,笔记本电脑常见故障原因 笔记本电脑常见故障解决方法【详解】...
- Linux文件其他操作
- 小学一年级20以内加减法题目自动生成(家长的福利,孩子的魔鬼)
- 光通信的再思考:5G流量爆发下的数据密度革命
- python人工智能之:多边形矩阵热图程序实战篇(二)
- 如何找到算法的时间复杂度
- 容量 Byte、KB、MB、GB、TB、PB、EB、ZB、YB、NB、DB、CB、XB
- Python解析json文件
- C++内存管理机制—Primitives笔记
- 【腾讯广告】监测链接和API自归因回传接口逻辑