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

Android如何简单快速实现RecycleView的拖动重排序功能

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

要实现这个拖动重排序功能,主要是用到了RecycleView的ItemTouchHelper类

首先是定义一个接口

interface ItemTouchHelperAdapter {fun onItemMove(fromPosition: Int, toPosition: Int)
}

然后我们的Adapter里面要实现这个接口

import androidx.recyclerview.widget.RecyclerView
import java.util.*class MyAdapter(private val items: MutableList<String>) : RecyclerView.Adapter<MyAdapter.ViewHolder>(), ItemTouchHelperAdapter {// ... ViewHolder and other methods ...override fun onItemMove(fromPosition: Int, toPosition: Int) {if (fromPosition < toPosition) {for (i in fromPosition until toPosition) {Collections.swap(items, i, i + 1)}} else {for (i in fromPosition downTo toPosition + 1) {Collections.swap(items, i, i - 1)}}notifyItemMoved(fromPosition, toPosition)}
}

实现ItemTouchHelper的Callback接口方法

class SimpleItemTouchHelperCallback(private val adapter: ItemTouchHelperAdapter) : ItemTouchHelper.Callback() {override fun isLongPressDragEnabled() = trueoverride fun isItemViewSwipeEnabled() = falseoverride fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {//这里是水平拖动val dragFlags = ItemTouchHelper.LEFT or ItemTouchHelper.RIGHTreturn makeMovementFlags(dragFlags, 0)}override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {adapter.onItemMove(viewHolder.adapterPosition, target.adapterPosition)return true}override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {// do nothing}
}

其中控制拖动方向的主要是在getMovementFlags方法中的dragFlags参数

如果是水平拖动,则用

ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT

如果是竖直方向上拖动,则是用

ItemTouchHelper.UP or ItemTouchHelper.DOWN

最后绑定到我们的RecycleView上

val adapter = MyAdapter(myDataset)
val recyclerView = findViewById<RecyclerView>(R.id.my_recycler_view)
recyclerView.adapter = adapterval callback = SimpleItemTouchHelperCallback(adapter)
val touchHelper = ItemTouchHelper(callback)
touchHelper.attachToRecyclerView(recyclerView)

完成以上的步骤就瞬间实现了让RecycleView支持拖动重排序的功能


欢迎关注我的公众号查看更多精彩文章!

AntDream

相关文章:

Android如何简单快速实现RecycleView的拖动重排序功能

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 要实现这个拖动重排序功能&#xff0c;主要是用到了RecycleView的ItemTouchHelper类 首先是定义一个接口 interface ItemTouchHelperAdapter …...

LabVIEW利用旋转编码器脉冲触发数据采集

利用旋转编码器发出的脉冲控制数据采集&#xff0c;可以采用硬件触发方式&#xff0c;以确保每个脉冲都能触发一次数据采集。本文提供了详细的解决方案&#xff0c;包括硬件连接、LabVIEW编程和触发设置&#xff0c;确保数据采集的准确性和实时性。 一、硬件连接 1. 旋转编码…...

Dubbo3 服务原生支持 http 访问,兼具高性能与易用性

作者&#xff1a;刘军 作为一款 rpc 框架&#xff0c;Dubbo 的优势是后端服务的高性能的通信、面向接口的易用性&#xff0c;而它带来的弊端则是 rpc 接口的测试与前端流量接入成本较高&#xff0c;我们需要专门的工具或协议转换才能实现后端服务调用。这个现状在 Dubbo3 中得…...

我在高职教STM32——GPIO入门之蜂鸣器

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…...

STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建

STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建 文章目录 STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建功能与作用典型工作流程 1. 硬件原理图介绍2. STM32 CubeMX工程搭建2.1 创建工程2.2 系统配置2.3 USART串口配…...

如果搜索一定超时,如何用dp来以空间换时间

E - Alphabet Tiles (atcoder.jp) 题目大意&#xff1a;1到k长度的字符串时&#xff0c;在A-Z给定数量下&#xff0c;搭配出多少种不同的字符串 思路 排列组合&#xff0c;会死人的 暴搜&#xff1a;可以解决&#xff0c;但是时间太长 dp&#xff1a;考虑前 i 个字母&…...

MySQL常见的命令

MySQL常见的命令 查看数据库&#xff08;注意添加分号&#xff09; show databases;进入到某个库 use 库; 例如&#xff1a;进入test use test;显示表格 show tables;直接展示某个库里面的表 show tables from 库&#xff1b; 例如&#xff1a;展示mysql中的表格 show tabl…...

11 类型泛化

11 类型泛化 1、函数模版1.1 前言1.2 函数模版1.3 隐式推断类型实参1.4 函数模板重载1.5 函数模板类型形参的默认类型&#xff08;C11标准&#xff09; 2、类模版2.1 类模板的成员函数延迟实例化2.2 类模板的静态成员2.3 类模板的递归实例化2.4 类模板类型形参缺省值 3、类模板…...

UE4_后期_ben_模糊和锐化滤镜

学习笔记&#xff0c;不喜勿喷&#xff0c;侵权立删&#xff0c;祝愿生活越来越好&#xff01; 本篇教程主要介绍后期处理的简单模糊和锐化滤镜效果&#xff0c;学习之前首先要回顾下上节课介绍的屏幕扭曲效果&#xff1a; 这是全屏效果&#xff0c;然后又介绍了几种蒙版&#…...

Spring Boot中Excel的导入导出的实现之Apache POI框架使用教程

文章目录 前言一、Apache POI 是什么&#xff1f;二、使用 Apache POI 实现 Excel 的导入和导出① 导入 Excel1. 添加依赖2. 编写导入逻辑3. 在 Controller 中处理上传请求 ② 导出 Excel1. 添加依赖2. 编写导出逻辑3. 在 Controller 中处理导出请求 总结 前言 在 Spring Boot …...

CentOS搭建kubernetes集群详细过程(yum安装方式)

kubernetes集群搭建详细过程&#xff08;yum安装方式&#xff09; Kubernetes&#xff0c;也被称为K8s&#xff0c;是一个多功能的容器管理工具&#xff0c;它不仅能够协调和调度容器的部署&#xff0c;而且还能监控容器的健康状况并自动修复常见问题。这个平台是在谷歌十多年…...

Java 面试题:Java 的 Exception 和 Error 有什么区别?

在Java编程中&#xff0c;异常处理是确保程序稳健性和可靠性的重要机制。Java提供了一套完善的异常处理框架&#xff0c;通过捕获和处理异常&#xff0c;开发者可以有效地应对程序运行时可能出现的各种问题。在这一框架中&#xff0c;Exception和Error是两个核心概念&#xff0…...

在Vue 3中,el-select循环el-option的常见踩坑点,value值绑定对象类型?选中效果不准确?

在Vue 3中&#xff0c;el-select 组件是来自 Element Plus UI 库的一部分。 如果你想要设置默认选中的选项&#xff0c;你可以使用 v-model 来绑定选中的值。如果你想要在某个时刻让某个选项显示为已选中&#xff0c;可以设置对应的值到 v-model 绑定的数据。 <template>…...

Qt实现单例模式:Q_GLOBAL_STATIC和Q_GLOBAL_STATIC_WITH_ARGS

目录 1.引言 2.了解Q_GLOBAL_STATIC 3.了解Q_GLOBAL_STATIC_WITH_ARGS 4.实现原理 4.1.对象的创建 4.2.QGlobalStatic 4.3.宏定义实现 4.4.注意事项 5.总结 1.引言 设计模式之单例模式-CSDN博客 所谓的全局静态对象&#xff0c;大多是在单例类中所见&#xff0c;在之前…...

通过nginx转发后应用偶发502bad gateway

序言 学习了一些东西&#xff0c;如何才是真正自己能用的呢&#xff1f;好像就是看自己的潜意识的反应&#xff0c;例如解决了一个问题&#xff0c;那么下次再碰到类似的问题&#xff0c;能直接下意识的去找到对应的信息&#xff0c;从而解决&#xff0c;而不是和第一次碰到一样…...

linux中如何进行yum源的挂载

linux中如何进行yum源的挂载 ​ 1.首先创建目录[rootserver /]# mkdir /rhel92.使用mount命令进行、dev/cdrom/的镜像文件进行挂载[rootserver /]# mount /dev/cdrom /rhel9/ ​ 注意&#xff1a;此时设立的是临时命令。重启后则失效&#xff0c;若想在下次开启后仍然挂载&a…...

ffmpeg的部署踩坑及简单使用方式

ffmpeg的使用方式有以下几种: 使用原生安装包 直接在ffmpeg官网上下载安装该软件,加入到环境变量中就可以使用了 优点:简单,灵活,代码中也不用添加其他第三方的包 缺点:需要手动安装ffmpeg,这点比较麻烦 部署-windows 在windows环境下,有时就算加入到了环境变量,…...

misc刷题记录2[陇剑杯 2021]

[陇剑杯 2021]webshell (1)单位网站被黑客挂马&#xff0c;请您从流量中分析出webshell&#xff0c;进行回答&#xff1a; 黑客登录系统使用的密码是_____________。得到的flag请使用NSSCTF{}格式提交。 这里我的思路是&#xff0c;既然要选择的时间段是黑客登录网站以后&…...

AI发展面临的问题? —— AI对创造的重新定义

一、AI的问题描述 AI与数据安全问题&#xff1a;随着AI技术的发展和应用&#xff0c;数据安全问题日益突出。AI模型训练依赖于大量数据&#xff0c;而这些数据中可能包含个人隐私、商业秘密等敏感信息。如果数据在采集、存储、使用过程中处理不当&#xff0c;可能导致数据泄露或…...

k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案

文章目录 OpenKruise简介OpenKruise来源OpenKruise是什么&#xff1f;核心组件有什么&#xff1f;有什么特性和优势&#xff1f;适用于什么场景&#xff1f; 什么是OpenKruise的原地升级原地升级的关键特性使用原地升级的组件原地升级的工作原理 应用环境一、OpenKruise部署1.安…...

用Logisim搞定Educoder交通灯实训:从数码管驱动到状态机集成的保姆级避坑指南

用Logisim征服Educoder交通灯实训&#xff1a;从零搭建到联调的全链路实战手册 第一次打开Educoder平台的交通灯实训项目时&#xff0c;我盯着那些闪烁的数码管和错综复杂的线路图&#xff0c;感觉像在破解某种外星密码。三小时后&#xff0c;当我的第一个状态机模块终于通过测…...

城通网盘解析工具终极指南:免费获取高速直连下载地址

城通网盘解析工具终极指南&#xff1a;免费获取高速直连下载地址 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否厌倦了城通网盘那令人抓狂的下载速度&#xff1f;每次下载文件都要面对漫长的等待…...

攻克R与Python的壁垒:Giotto空间转录组分析环境一站式搭建指南

1. 为什么你的Giotto安装总是失败&#xff1f; 每次看到空间转录组数据就手痒想用Giotto分析&#xff0c;结果安装环节就被劝退&#xff1f;这可能是大多数生物信息学新手都会遇到的尴尬。作为一个在生信领域摸爬滚打多年的"环境配置工程师"&#xff0c;我太理解这种…...

如何快速掌握阴阳师自动化脚本:OAS解放双手的完整教程

如何快速掌握阴阳师自动化脚本&#xff1a;OAS解放双手的完整教程 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 阴阳师自动化脚本&#xff08;Onmyoji Auto Script&#xff0c…...

Go语言静态站点生成器Zeuxis:极简架构与高性能构建实践

1. 项目概述&#xff1a;一个轻量级、高性能的静态站点生成器最近在折腾个人博客和文档站点&#xff0c;发现市面上的静态站点生成器虽然多&#xff0c;但要么配置复杂、学习曲线陡峭&#xff0c;要么过于臃肿&#xff0c;启动和构建速度慢得让人抓狂。直到我遇到了bnomei/zeux…...

MySQL 视图使用场景与限制

视图是把查询封装成「虚拟表」的方式&#xff0c;用对了简化查询&#xff0c;用错了性能爆炸。这篇说说视图的用法和注意事项。 什么是视图&#xff1f; -- 视图&#xff1a;保存好的 SQL 查询&#xff0c;像表一样使用 CREATE VIEW view_name AS SELECT column1, column2 FROM…...

Seraphine终极指南:英雄联盟智能助手如何提升您的游戏胜率

Seraphine终极指南&#xff1a;英雄联盟智能助手如何提升您的游戏胜率 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 在英雄联盟的激烈对局中&#xff0c;错过对局接受、BP阶段犹豫不决、缺乏队友对手信息&a…...

基于Panel与LLM构建智能数据可视化应用的架构与实践

1. 项目概述与核心价值最近在数据可视化与交互应用开发领域&#xff0c;一个名为holoviz-topics/panel-chat-examples的项目仓库引起了我的注意。乍一看&#xff0c;这似乎只是将聊天界面&#xff08;Chat Interface&#xff09;与 Panel 这个强大的 Python 交互式仪表盘库结合…...

FPGA与GPU在OSOS-ELM算法中的性能对比与优化

1. 项目概述在边缘计算和实时信号处理领域&#xff0c;极端学习机(ELM)因其独特的训练机制和高效的计算性能而备受关注。OSOS-ELM作为ELM的一种变体&#xff0c;通过在线顺序学习机制进一步提升了算法的实用性。这项研究聚焦于FPGA和GPU两种硬件平台在执行OSOS-ELM算法时的性能…...

5分钟学会创建专业交通网络可视化地图

5分钟学会创建专业交通网络可视化地图 【免费下载链接】transit-map The server and client used in transit map simulations like swisstrains.ch 项目地址: https://gitcode.com/gh_mirrors/tr/transit-map 你想在网页上展示动态的公共交通网络吗&#xff1f;Transit…...