当前位置: 首页 > news >正文

史上最精简Android RecyclerView实现拖拽排序改变位置代码

要实现RecyclerView的长按拖动改变位置,可以使用ItemTouchHelper类来处理拖动和滑动的操作。下面演示如何实现长按拖动改变位置:

首先,在你的Activity或Fragment中,初始化RecyclerView和ItemTouchHelper:

RecyclerView recyclerView = findViewById(R.id.recyclerView);
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelperCallback());
itemTouchHelper.attachToRecyclerView(recyclerView);RecyclerViewAdapter adapter = new RecyclerViewAdapter(dataList);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));

然后,创建一个ItemTouchHelper.Callback的子类,用于处理拖动和滑动的操作:

private class ItemTouchHelperCallback extends ItemTouchHelper.Callback {// 设置支持的拖动和滑动的方向@Overridepublic int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; // 支持上下拖动int swipeFlags = 0; // 不支持滑动return makeMovementFlags(dragFlags, swipeFlags);}// 在拖动过程中不断调用,用于刷新RecyclerView的显示@Overridepublic boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder source, @NonNull RecyclerView.ViewHolder target) {int fromPosition = source.getAdapterPosition();int toPosition = target.getAdapterPosition();// 更新数据集中的位置Collections.swap(dataList, fromPosition, toPosition);// 更新RecyclerView的显示recyclerView.getAdapter().notifyItemMoved(fromPosition, toPosition);return true;}// 在滑动过程中调用,可以用于实现滑动删除等功能@Overridepublic void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {// 不做任何操作}
}

完成了,可以试着拖动一下试试

相关文章:

史上最精简Android RecyclerView实现拖拽排序改变位置代码

要实现RecyclerView的长按拖动改变位置,可以使用ItemTouchHelper类来处理拖动和滑动的操作。下面演示如何实现长按拖动改变位置: 首先,在你的Activity或Fragment中,初始化RecyclerView和ItemTouchHelper: RecyclerVi…...

centos 7 系统上重启 mysql 时报错 Failed to restart mysqld.service: Unit not found.

在 centos 7 系统上,使用常规命令:systemctl restart mysql 或 service mysqld restart 重启 mysql 时都会报如下错误: Failed to start mysqld.service: Unit not found. 根据所报错误,在网上搜罗了一圈,未果&#x…...

时间复杂度空间复杂度相关练习题

1.消失的数字 【题目】:题目链接 思路1:排序——》qsort快排——》时间复杂度O(n*log2n) 不符合要求 思路2:(0123...n)-(a[0]a[1][2]...a[n-2]) ——》 时间复杂度O(N)空间复杂度…...

Linux | Ubuntu18.04安装RTX 4060显卡驱动完整教程

文章目录 概述一、定义介绍二、操作教程(一)、前期准备1.进入终端界面2.关闭界面显示器3.禁用其他显卡驱动4.卸载残余显卡驱动5.下载驱动(二)、安装驱动1.给驱动程序赋予权限2.安装驱动3.检查结果(三)、后续问题1.黑屏问题概述 本节详细介绍了如何在ubuntu18系统安装4060显卡的…...

Mermaid语法使用

Mermaid语法使用 1. 基础类1.1 流程图1.2 时序图 2. 工程图2.1 类图2.2 Git图 1. 基础类 1.1 流程图 graph TBid1(圆角矩形)--普通线-->id2[矩形];subgraph 子图id2粗线>id3{菱形}id3-. 虚线.->id4>右向旗帜]id3--无箭头---id5((圆形))end方向定义 用词含义TB从…...

[OnWork.Tools]系列 05-系统工具

简介 系统工具主要是将Window常用工具的快捷启动的集合 双击快速启动 计算器,记事本,截图,画图工具 控制面板,服务管理,关闭显示器,关机 启动文件夹,我的电脑,管理工具 右键菜单 添加快捷方式到桌面...

SOME/IP学习笔记1

SOA概念 在SOA中,每个服务就好像我们每一个人在社会中扮演的角色,在对别人提供着服务的同时,同时也享受着别人提供出来的服务,人与人之间,既是彼此独立的,又是需要互相通讯的。服务提供者将功能具象为一组接口,这样使用者就能知道如何调用服务,完成某件事情,得到某个…...

Effective Java笔记(26)请不要使用原生态类型

首先介绍一些术语 。 声明中具有一个或者多个类型参数( type parameter )的类或者接口,就是泛型( generic )类或者接口 。 例如,List 接口就只有单个类型参数 E ,表示列表的元素类型 。这个接口…...

linux 内存 - KO内存占用

说明 KO(kernel module)占用的内存分为两部分: 静态占用 :ko insmod时系统固定分配的内存。动态申请 :代码中动态申请的内存,由于申请方式不同,统计的方式也可能不同,例如:使用vmalloc和kmall…...

2023.8.7论文阅读

文章目录 CMUNeXt: An Efficient Medical Image Segmentation Network based on Large Kernel and Skip Fusion摘要本文方法实验结果 Boundary Difference Over Union Loss For Medical Image Segmentation(损失函数)摘要本文方法实验结果 CMUNeXt: An E…...

2023河南萌新联赛第(五)场:郑州轻工业大学 --Kruskal

题目描述 给定一张nnn个点的无向完全图,其中两点之间的路径边权为两点编号的按位与(编号为 (1,2,...,n)(1,2,...,n)(1,2,...,n)),即w(u,v)u&v(1≤u,v≤n)w\left(u, v \right )u\&v \left( 1 \le u, v \le n \right)w(u,v…...

Maven引入本地jar包

maven做为一种强大的依赖管理工具,可以帮助我们更方便的管理项目中的依赖;而在使用过程中我们难免会有需要引入本地jar包的需求,这里踩过坑之后我分享俩种引入方式; 1.上传jar到本地maven仓库,再引入 使用此方法后可…...

Java并发编程实战——结构化并发应用程序

文章目录 6 任务执行6.1 在线程中执行任务6.1.1 串行地执行任务6.1.2 显式地为任务创建线程6.1.3 无限制创建线程的不足 6.2 Executor框架6.2.1 示例:基于Executor的Web服务器6.2.2 执行策略6.2.3 线程池6.2.4 Executor的生命周期6.2.5 延迟任务与周期任务 6.3 找出…...

uniapp echarts 点击失效

这个问题网上搜了一堆,有的让你降版本,有的让你改源码。。。都不太符合预期,目前我的方法可以用最新的echarts。 这个方法就是由npm安装转为CDN,当然你可能会质疑用CDN这样会不稳定,那如果CDN的地址是本地呢&#xff1…...

手机开启应急预警通知 / 地震预警

前言 安卓手机在检测到地震时,将发送地震预警通知,但此设置是默认关闭的,原因是以防引发用户恐慌从而引发安全问题,且开启此设置需要完成指引教程,因此默认关闭此设置。下文介绍如何开启此设置。 开启方法 华为手机开…...

2020年12月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 执行语句print(10==10.0)的结果为? A:10 B:10.0 C:True D:False 正确的答案是 C:True。 解析:在Python中,比较运算符 “==” 用于比较两个值是否相等。在这个特定的比较中,整数10和浮点数10.0在数值上是相等的。…...

遇到无法复现的 Bug

当我们在软件开发过程中遇到无法复现的 Bug 时,这可能会让我们感到头疼和困惑。处理这种 Bug 需要一些技巧和方法来帮助我们更好地解决问题。本篇博客将为大家总结一些常用的技术手段和策略,希望能对开发者们在日常工作中遇到类似问题时提供一些帮助。 …...

虚拟列表的实现(简单易懂)

起因: app开发过程中遇到需要渲染3000行的列表,页面直接卡顿,所以开始研究起虚拟列表 实现前提条件: item项等高列表 实现思路: 首先是dom结构: 定义一个容器(固定高度)&#…...

【WordPress】如何在WordPress中实现真·页面路由

这篇文章也可以在我的博客中查看 页面路由 是什么 页面路由是指从url顺着网线砍到网站内容的途径,说人话就是地址与页面的映射。 就像真实世界的地址一样,我要找你,必须知道你的地址。 在网站中,通过地址找内容的机制&#xf…...

Android界面设计与用户体验

Android界面设计与用户体验 1. 引言 在如今竞争激烈的移动应用市场,提供优秀的用户体验成为了应用开发的关键要素。无论应用功能多么强大,如果用户界面设计不合理,用户体验不佳,很可能会导致用户流失。因此,在Androi…...

Python异步编程模式:从同步到异步的演进

Python异步编程模式:从同步到异步的演进 引言 在Python开发中,异步编程模式是构建高性能应用的关键。作为一名从Rust转向Python的后端开发者,我深刻体会到异步编程在处理高并发场景时的优势。本文将深入探讨Python中的异步编程模式及其最佳实…...

深入解析Arm Cortex-A53 Cache架构:从原理到多核一致性与性能优化实践

1. 项目概述:为什么我们需要深入理解A53的Cache?在嵌入式系统和移动计算领域,Arm Cortex-A53处理器是一个绕不开的名字。作为Armv8-A架构下的“小核”常青树,它以其出色的能效比,广泛存在于从智能手表到智能电视&#…...

指纹浏览器缓存机制原理与环境数据安全管控策略

引言绝大多数使用者在日常运用指纹浏览器搭建独立虚拟浏览环境时,重点注意力都集中在硬件指纹修改、代理网络绑定、基础参数调试等显性操作之上,往往忽略了软件内部缓存运行机制带来的各类隐性影响。虚拟环境运行过程中自动生成的页面缓存、站点数据、本…...

Steam账号被盗,手机邮箱都失效?别慌!我用支付宝账单截图成功找回(附详细客服案件创建流程)

Steam账号终极找回指南:当手机邮箱全失效时的支付宝账单申诉法 凌晨三点,盯着屏幕上"未找到关联账户"的红色提示,手指在键盘上悬停了十分钟——这是许多Steam玩家遭遇账号全维度被盗时的真实噩梦。当盗号者不仅修改了密码&#xf…...

Spring AI 快速对接 AI 大模型(开箱即用)

一、项目准备&#xff08;最简依赖&#xff09;1. 创建 Spring Boot 项目推荐版本&#xff1a;Spring Boot 3.2.x JDK 版本&#xff1a;172. pom.xml 核心依赖<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.o…...

创业公司如何设计有效的OKR

创业公司如何设计有效的OKR 前言 创业第一年&#xff0c;我们没有明确的目标&#xff0c;大家都很忙&#xff0c;但不知道忙什么。每个人都在做事&#xff0c;但好像没有形成合力。 后来我开始研究 OKR&#xff08;Objectives and Key Results&#xff09;&#xff0c;发现这不…...

别再乱设Public了!Minio权限控制实战:从用户、分组到自定义策略的完整配置流程

别再乱设Public了&#xff01;Minio权限控制实战&#xff1a;从用户、分组到自定义策略的完整配置流程 在分布式存储系统的日常运维中&#xff0c;权限配置不当引发的数据泄露事件屡见不鲜。最近某科技公司因对象存储桶误设为公开访问&#xff0c;导致数万份客户资料暴露的案例…...

藏在Modbus‘写寄存器’请求里的秘密:用Python+pyshark复现CISCN2023流量分析

藏在Modbus‘写寄存器’请求里的秘密&#xff1a;用Pythonpyshark复现CISCN2023流量分析 当生产网络流量中出现异常数据包时&#xff0c;传统的手动分析方式往往效率低下。本文将带你用Pythonpyshark构建自动化分析流水线&#xff0c;从海量Modbus协议数据中快速定位可疑通信模…...

告别BurpSuite自带Intruder的龟速:用Turbo Intruder插件30倍速爆破验证码(附Python脚本)

突破传统限制&#xff1a;Turbo Intruder在验证码爆破中的高效实践 在渗透测试和安全评估工作中&#xff0c;验证码爆破是一个常见但极具挑战性的任务。传统的BurpSuite Intruder模块虽然功能强大&#xff0c;但在处理高并发请求时往往显得力不从心&#xff0c;速度成为制约效率…...

Python 高级编程 014:isinstance 与 type 的核心差异

Python 高级编程 014&#xff1a;isinstance 与 type 的核心差异一、先明确&#xff1a;二者的核心定位差异二、实战代码&#xff1a;一眼看清区别1. 定义继承类2. 用 isinstance () 判断&#xff08;推荐&#xff09;3. 用 type () 判断&#xff08;易踩坑&#xff09;三、关键…...