RecycleView实现item侧滑删除与拖拽

yizhihongxing

RecyclerView实现item侧滑删除与拖拽的攻略

1. 添加依赖库

首先,确保在项目的build.gradle文件中添加RecyclerView的依赖库:

implementation 'androidx.recyclerview:recyclerview:1.2.0'

2. 创建RecyclerView布局

在XML布局文件中添加RecyclerView控件:

<androidx.recyclerview.widget.RecyclerView
    android:id=\"@+id/recyclerView\"
    android:layout_width=\"match_parent\"
    android:layout_height=\"match_parent\"
    />

3. 创建RecyclerView适配器

创建一个继承自RecyclerView.Adapter的适配器类,并实现必要的方法:

class MyAdapter(private val dataList: MutableList<String>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() {

    // 创建ViewHolder
    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        // 在ViewHolder中找到需要操作的控件
        val textView: TextView = itemView.findViewById(R.id.textView)
    }

    // 创建ViewHolder并绑定布局
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
        return ViewHolder(view)
    }

    // 绑定ViewHolder的数据
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.textView.text = dataList[position]
    }

    // 返回数据项数量
    override fun getItemCount(): Int {
        return dataList.size
    }
}

4. 实现侧滑删除

为了实现侧滑删除功能,我们可以使用ItemTouchHelper类。在Activity或Fragment中,添加以下代码:

val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT) {
    override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
        // 不需要实现拖拽功能,返回false
        return false
    }

    override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
        // 在这里处理侧滑删除的逻辑
        val position = viewHolder.adapterPosition
        dataList.removeAt(position)
        adapter.notifyItemRemoved(position)
    }
})

itemTouchHelper.attachToRecyclerView(recyclerView)

5. 实现拖拽排序

要实现拖拽排序功能,我们需要在适配器中添加一些额外的方法,并在Activity或Fragment中添加以下代码:

val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() {
    override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
        val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN
        val swipeFlags = 0
        return makeMovementFlags(dragFlags, swipeFlags)
    }

    override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
        val fromPosition = viewHolder.adapterPosition
        val toPosition = target.adapterPosition
        Collections.swap(dataList, fromPosition, toPosition)
        adapter.notifyItemMoved(fromPosition, toPosition)
        return true
    }

    override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
        // 不需要实现侧滑删除功能,返回false
    }
})

itemTouchHelper.attachToRecyclerView(recyclerView)

示例说明

示例1:侧滑删除

在适配器的onSwiped方法中,我们通过adapterPosition获取到被侧滑的item的位置,然后从数据源中移除该位置的数据,并调用adapter的notifyItemRemoved方法更新RecyclerView。

示例2:拖拽排序

在适配器的onMove方法中,我们通过adapterPosition获取到被拖拽的item的位置和目标位置,然后使用Collections.swap方法交换数据源中这两个位置的数据,并调用adapter的notifyItemMoved方法更新RecyclerView。

以上就是使用RecyclerView实现item侧滑删除与拖拽的完整攻略。你可以根据自己的需求进行相应的修改和扩展。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:RecycleView实现item侧滑删除与拖拽 - Python技术站

(0)
上一篇 2023年8月20日
下一篇 2023年8月20日

相关文章

  • mstp配置实例

    以下是关于“MSTP配置实例”的完整攻略,包含两个示例说明。 MSTP配置实例 MSTP(Multiple Spanning Tree Protocol)是一种用于在网络中防止环的协议。在本攻略中,我们将介绍如何配置MSTP以及如何在网络中使用MSTP。 1. 配置MSTP 在配置MSTP之前,我们需要确保网络中的所有设备都支持MSTP。以下是一个示例: i…

    other 2023年5月9日
    00
  • 如何做好app的引导页?(转)

    如何做好app的引导页?(转) 对于很多新的app,引导页是第一次接触用户的机会,既要吸引用户的眼球,同时也要将app的功能简单明了的展示出来。以下是一些建议,可以帮助你设计出出色的app引导页。 简洁而有力的设计 引导页的设计应该是清晰而富有吸引力的。用图像和少量的富有感染力的文案,直观的展现出你的app优势和特点。保持设计简单而有力会更容易引起用户的关注…

    其他 2023年3月28日
    00
  • ae怎么制作小球页面加载动效?

    对于怎么制作小球页面加载动效,实际上可以使用 ae 动画软件制作,具体步骤如下: 步骤一:新建一个 ae 项目,并导入素材 首先,我们新建一个 ae 项目,选择一个合适的分辨率(如 1920 * 1080),然后需要导入素材,可以使用 ae 自带的素材库,也可以选择自己准备的素材,或者通过网络下载一些素材。 步骤二:制作小球动画 接下来,我们需要制作小球动画…

    other 2023年6月25日
    00
  • win10的ip地址在哪里修改?win10的ip地址设置操作方法

    Win10的IP地址修改攻略 在Win10操作系统中,你可以通过以下步骤修改IP地址: 打开“网络和Internet设置”: 点击任务栏右下角的网络图标。 在弹出的菜单中,点击“网络和Internet设置”。 进入“网络和Internet设置”页面: 在“网络和Internet设置”页面中,点击左侧的“更改适配器选项”。 打开网络适配器设置: 在“更改适配器…

    other 2023年7月29日
    00
  • 调度器(scheduler)

    以下是详细讲解“调度器(scheduler)”的完整攻略: 调度器(scheduler)的完整攻略 调度器(scheduler)是一种用于管理任务的工具,可以按照一定的规则和策略来调度任务的执行。调度器通常包括以下几个组件: 任务队列:用于存储待执行的任务。 调度器线程:用于从任务队列中取出任务,并执行任务。 调度策略:用于决定任务的执行顺序和优先级。 任务…

    other 2023年5月10日
    00
  • go标准库 常用的包及功能

    Go是一种开源的编程语言,其标准库提供了许多常用的包和功能,可以帮助开发人员快速构建高效的应用程序。在本攻略中,我们将介绍Go标准库中常用的包及其功能,并提供两个示例说明。 fmt fmt 包提供了格式化输入和输出的功能。它支持多种格式,包括字符串、数字、布尔值等。以下是 fmt 包的一些常用函数: Print:将参数格式化为字符串并输出到标准输出。 Pri…

    other 2023年5月6日
    00
  • 什么是云计算?

    什么是云计算? 云计算(Cloud Computing)是一种基于互联网的计算方式。将计算能力、存储能力等资源进行集成,并通过互联网为用户提供各种IT服务,让用户可以随时随地地获取所需的计算资源和服务。 云计算的部署模式有: 1.公有云:由互联网上的公司提供基础设施、应用程序和数据存储服务等。 2.私有云:由企业自己搭建,用于存储、处理、共享数据,提供各种服…

    其他 2023年4月19日
    00
  • 通过OpenGL ES混合模式缩放视频缓冲区来适应显示尺寸

    实现视频缩放的基本思路是通过改变渲染纹理的顶点坐标和纹理坐标实现,其中OpenGL ES混合模式是一种可以较好地适应不同尺寸的方法。 具体实现方法如下: 初始化OpenGL ES环境,通过GLSurfaceView.Renderer的回调函数onSurfaceCreated实现。 @Override public void onSurfaceCreated(…

    other 2023年6月20日
    00
合作推广
合作推广
分享本页
返回顶部