RecycleView实现item侧滑删除与拖拽

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日

相关文章

  • 总结Bean的三种自定义初始化和销毁方法

    下面是详细讲解”总结Bean的三种自定义初始化和销毁方法”的完整攻略: 为Bean自定义初始化和销毁方法的三种方式 实现InitializingBean和DisposableBean接口: 可以通过实现Spring中的InitializingBean和DisposableBean接口,来自定义Bean的初始化和销毁方法。 示例代码如下: import org…

    other 2023年6月20日
    00
  • 把jQuery的类、插件封装成seajs的模块的方法

    将jQuery的类和插件封装成seajs的模块,可以方便地管理和使用,下面是具体的攻略过程。 步骤一:使用define()定义模块 使用define()方法定义一个seajs的模块,该方法需要传递两个参数: 模块的名称。 传递一个数组,表示该模块需要依赖的其他模块。 define(‘jquery’, [], function(){ return $; });…

    other 2023年6月25日
    00
  • android实现获取正在运行的应用程序

    要实现获取Android设备上正在运行的应用程序,需要使用 ActivityManager 类。它提供了一种获取当前运行的任务列表和栈信息的方法。以下是实现攻略的完整过程: 步骤一:添加权限 在 AndroidManifest.xml 文件中添加获取正在运行应用程序信息所需要的权限: <uses-permission android:name=&quo…

    other 2023年6月25日
    00
  • 资讯网站解决方案

    资讯网站解决方案 对于一个资讯网站,我们需要考虑以下几方面的解决方案,以确保网站的稳定、安全和易用性。 选择合适的服务器 一台良好的服务器是保证网站正常运行的关键,我们需要选择以下几方面来确定服务器: 服务器类型:推荐选择云服务器,因为它们提供了高性能、高可靠性、易扩展性和灵活性。 操作系统:Linux服务器更加稳定和安全,而且配合LAMP(Linux、Ap…

    other 2023年6月26日
    00
  • 解决C++中重定义的方法总结

    “解决C++中重定义的方法总结”主要是指在C++程序编写过程中遇到同名函数、变量等重复定义的情况,该如何解决的总结。下面详细讲解一下完整的解决方法攻略。 1. 使用ifndef和define宏 在头文件中使用#ifndef宏和#define宏,以防止头文件被重复引用而导致重定义。ifndef的意思是:如果这个宏没有被定义过,则对下面的语句进行编译,否则就跳过…

    other 2023年6月26日
    00
  • Win11系统Edge浏览器按F12打不开开发者工具怎么办

    针对Win11系统Edge浏览器按F12打不开开发者工具的问题,有以下两种解决方法: 方法一:通过辅助功能设置来启用开发者工具 点击Edge浏览器右上角的三个点图标,选择“设置”选项。 在打开的设置页面中,选择“辅助功能”选项。 在辅助功能页面中,找到“键盘”选项,点击打开。 在键盘页面中,找到“F12 开发者工具”选项,确保该选项为“启用”。 如果该选项为…

    other 2023年6月27日
    00
  • WinXP、Win7、Win8系统电脑查看本机IP地址的方法图文教程

    查看本机IP地址的方法 Windows XP 点击“开始”按钮,选择“运行”。 在运行对话框中输入“cmd”并按下回车键,打开命令提示符窗口。 在命令提示符窗口中输入“ipconfig”并按下回车键。 在输出结果中查找“IPv4 地址”或“IP 地址”,即可找到本机的IP地址。 示例说明: 假设在Windows XP系统中,命令提示符窗口中的输出结果如下: …

    other 2023年7月30日
    00
  • 详解Xcode编译选项功能

    详解Xcode编译选项功能 什么是Xcode编译选项 Xcode编译选项是用来进行构建iOS或macOS应用程序的配置设置。它可以用于更改应用程序的构建设置,优化构建流程,处理构建标志等。 如何打开Xcode编译选项 打开Xcode工程 选择Xcode顶部菜单栏中的 “Product” > “Scheme” > “Edit Scheme”。 在 …

    other 2023年6月26日
    00