android ItemTouchHelper实现可拖拽和侧滑的列表的示例代码

Android ItemTouchHelper实现可拖拽和侧滑的列表攻略

1. 添加依赖库

首先,在你的项目的build.gradle文件中添加以下依赖库:

implementation 'androidx.recyclerview:recyclerview:1.2.0'

2. 创建RecyclerView

在你的布局文件中添加一个RecyclerView:

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

3. 创建RecyclerView的Adapter

创建一个继承自RecyclerView.Adapter的Adapter类,并实现必要的方法。这个Adapter将用于管理列表中的数据项。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    // 数据集合
    private List<String> mData;

    // 构造方法
    public MyAdapter(List<String> data) {
        mData = data;
    }

    // 创建ViewHolder
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
        return new ViewHolder(view);
    }

    // 绑定ViewHolder
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        String item = mData.get(position);
        holder.textView.setText(item);
    }

    // 返回数据项数量
    @Override
    public int getItemCount() {
        return mData.size();
    }

    // ViewHolder类
    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView textView;

        public ViewHolder(View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.textView);
        }
    }
}

4. 创建ItemTouchHelper.Callback

创建一个继承自ItemTouchHelper.Callback的类,用于处理列表项的拖拽和侧滑操作。

public class MyItemTouchHelperCallback extends ItemTouchHelper.Callback {
    private final ItemTouchHelperAdapter mAdapter;

    public MyItemTouchHelperCallback(ItemTouchHelperAdapter adapter) {
        mAdapter = adapter;
    }

    // 设置支持的拖拽和侧滑方向
    @Override
    public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
        int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
        return makeMovementFlags(dragFlags, swipeFlags);
    }

    // 处理拖拽事件
    @Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
        mAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
        return true;
    }

    // 处理侧滑事件
    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
        mAdapter.onItemDismiss(viewHolder.getAdapterPosition());
    }
}

5. 实现ItemTouchHelperAdapter接口

创建一个实现了ItemTouchHelperAdapter接口的类,用于处理拖拽和侧滑事件。

public interface ItemTouchHelperAdapter {
    void onItemMove(int fromPosition, int toPosition);
    void onItemDismiss(int position);
}

6. 在Activity中使用ItemTouchHelper

在你的Activity中,实例化RecyclerView、Adapter和ItemTouchHelper,并将它们关联起来。

public class MainActivity extends AppCompatActivity implements ItemTouchHelperAdapter {
    private RecyclerView mRecyclerView;
    private MyAdapter mAdapter;
    private ItemTouchHelper mItemTouchHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化RecyclerView
        mRecyclerView = findViewById(R.id.recyclerView);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        // 初始化Adapter
        List<String> data = new ArrayList<>();
        // 添加示例数据
        data.add(\"Item 1\");
        data.add(\"Item 2\");
        data.add(\"Item 3\");
        mAdapter = new MyAdapter(data);
        mRecyclerView.setAdapter(mAdapter);

        // 初始化ItemTouchHelper
        ItemTouchHelper.Callback callback = new MyItemTouchHelperCallback(this);
        mItemTouchHelper = new ItemTouchHelper(callback);
        mItemTouchHelper.attachToRecyclerView(mRecyclerView);
    }

    // 实现ItemTouchHelperAdapter接口的方法
    @Override
    public void onItemMove(int fromPosition, int toPosition) {
        // 处理拖拽事件
        Collections.swap(mAdapter.getData(), fromPosition, toPosition);
        mAdapter.notifyItemMoved(fromPosition, toPosition);
    }

    @Override
    public void onItemDismiss(int position) {
        // 处理侧滑事件
        mAdapter.getData().remove(position);
        mAdapter.notifyItemRemoved(position);
    }
}

以上就是实现可拖拽和侧滑的列表的示例代码的完整攻略。你可以根据自己的需求进行修改和扩展。

示例说明

示例1:拖拽列表项

用户可以长按某个列表项并拖动它,将其移动到列表中的其他位置。

示例2:侧滑删除列表项

用户可以向左或向右滑动某个列表项,以删除该项。

希望这个攻略对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android ItemTouchHelper实现可拖拽和侧滑的列表的示例代码 - Python技术站

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

相关文章

  • uniapp小程序实战之利用腾讯地图获取定位

    Uniapp小程序实战之利用腾讯地图获取定位 简介 本文将详细介绍如何使用Uniapp和腾讯地图API获取用户的位置信息,包括如下内容: 如何在Uniapp项目中引入腾讯地图API 如何获取用户的地理位置信息 步骤 步骤一:引入腾讯地图API 在Uniapp项目中使用腾讯地图API需要在项目的 index.html 文件中添加如下代码: <script…

    other 2023年6月26日
    00
  • 程序员 代码是从头编还是使用框架好呢?

    当程序员开始编写代码时,他们经常会面临一个选择:是从头开始编写代码,还是使用框架来加速开发和减少代码的编写时间。虽然这个选择可能因项目而异,但以下是一些攻略来帮助你做出正确的决定: 什么是框架? 在了解如何选择到底是使用框架还是手写代码之前,需要了解什么是框架。框架通常是一组预定的规则、标准和工具的集合,可用于快速开发应用程序。框架也允许多个程序员在同一应用…

    other 2023年6月26日
    00
  • 浅析linux环境下一个进程最多能有多少个线程

    关于“浅析linux环境下一个进程最多能有多少个线程”的攻略,我会详细讲解以下内容: 一. Linux下进程和线程的简介 在 Linux 系统中,进程(process)是系统资源分配的基本单位,线程(thread)是处理机调度的基本单位。 进程可以看成是一个独立的程序,拥有自己独立的内存空间、数据栈等系统资源,而线程是进程中的一条执行线路,具有共享进程资源,…

    other 2023年6月27日
    00
  • 小米miui 6内测包下载地址 miui v6内测版官方下载地址

    小米MIUI 6内测包下载攻略 小米MIUI 6是小米公司推出的一款基于Android操作系统的用户界面。内测版是在正式发布之前提供给用户测试和反馈的版本。本攻略将详细介绍小米MIUI 6内测包的下载地址和安装步骤。 步骤一:访问官方网站 首先,您需要访问小米官方网站以获取MIUI 6内测包的下载地址。您可以在小米官方网站的下载页面找到相关的链接。 示例说明…

    other 2023年8月5日
    00
  • sqljoinon多表连接

    当然,我很乐意为您提供有关“SQL JOIN ON多表连接”的完整攻略。以下是详细的步骤和两个示例: 1 JOIN ON多表连接 JOIN ON是SQL中用于连接多个表的一种方法。它可以将多个表中的数据组合在一起,以便进行更复杂的查询和分析。JOIN ON通常需要指定连接条件,以便确定如何将表中的数据组合在一起。 2 JOIN ON的用法 以下是JOIN O…

    other 2023年5月6日
    00
  • 浅谈Spring-cloud 之 sleuth 服务链路跟踪

    浅谈Spring-cloud 之 sleuth 服务链路跟踪 Spring Cloud Sleuth 是 Spring Cloud 的一个组件,用于跟踪分布式系统的请求链路。Sleuth 的最终目标是通过跟踪服务的调用链路来生成分布式系统的请求跟踪图。 为什么需要服务链路跟踪 在一个分布式系统中,很多服务相互调用,一个请求对应着多个服务。系统运营商往往需要在…

    other 2023年6月27日
    00
  • linuxctrl+z的使用方法

    Linux Ctrl+Z的使用方法 在Linux系统中,Ctrl+Z是一个非常有用的快捷键。它可以暂停当前正在运行的命令,并将其放入后台,同时返回到命令行提示符下。在这篇文章中,我们将讨论在Linux系统中如何使用Ctrl+Z。 Ctrl+Z的常见用途 Ctrl+Z常用于以下几个场景: 暂停一个正在运行的进程 将一个后台进程切换到前台 终止一个正在运行的进程…

    其他 2023年3月29日
    00
  • vue鼠标移入移出事件

    以下是“Vue鼠标移入移出事件的完整攻略”的详细说明,包括过程中的两个示例说明。 Vue鼠标移入移出事件的完整攻略 Vue是一种流行的JavaScript框架,可以用于构建交互式Web应程序。以下是一份关于Vue鼠标移入移出事件的完整攻略。 1. Vue鼠标移入移出事件基础知 在开始使用Vue鼠标移入移出事件之前,我们需要掌握一些基础知识,例如: Vue的基…

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