当前位置: 首页 > 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

http://www.lryc.cn/news/375353.html

相关文章:

  • LabVIEW利用旋转编码器脉冲触发数据采集
  • Dubbo3 服务原生支持 http 访问,兼具高性能与易用性
  • 我在高职教STM32——GPIO入门之蜂鸣器
  • STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建
  • 如果搜索一定超时,如何用dp来以空间换时间
  • MySQL常见的命令
  • 11 类型泛化
  • UE4_后期_ben_模糊和锐化滤镜
  • Spring Boot中Excel的导入导出的实现之Apache POI框架使用教程
  • CentOS搭建kubernetes集群详细过程(yum安装方式)
  • Java 面试题:Java 的 Exception 和 Error 有什么区别?
  • 在Vue 3中,el-select循环el-option的常见踩坑点,value值绑定对象类型?选中效果不准确?
  • Qt实现单例模式:Q_GLOBAL_STATIC和Q_GLOBAL_STATIC_WITH_ARGS
  • 通过nginx转发后应用偶发502bad gateway
  • linux中如何进行yum源的挂载
  • ffmpeg的部署踩坑及简单使用方式
  • misc刷题记录2[陇剑杯 2021]
  • AI发展面临的问题? —— AI对创造的重新定义
  • k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案
  • 上海亚商投顾:沪指缩量调整 PCB概念股持续爆发
  • QT属性系统,简单属性功能快速实现 QT属性的简单理解 属性学习如此简单 一文就能读懂QT属性 QT属性最简单的学习
  • 【IEEE出版丨EI检索】2024新型电力系统与电力电子国际会议(NPSPE 2024)
  • 【Netty】nio阻塞非阻塞Selector
  • ES 操作
  • uniapp如何实现跳转
  • Stable-Diffusion-WebUI 常用提示词插件
  • 单片机 PWM输入捕获【学习记录】
  • 3.1、前端异步编程(超详细手写实现Promise;实现all、race、allSettled、any;async/await的使用)
  • 3.1. 马氏链-马氏链的定义和示例
  • 红利之外的A股底仓选择:A50