RecyclerView拖动之ItemTouchHelper.Callback的使用

AndroidX RecyclerView总结-ItemTouchHelper 概述 RecyclerView不仅实现在有限窗口显示大数据集,还支持对其中的item视图进行Swipe(轻扫)和Drag(拖拽)操作,这可以借助ItemTouchHelper辅助类轻松实现。 基本使用 关键代码: // 1.创建ItemTouchHelper.Callback,实现回调方法 ItemTouchHelper.Callback callback = new ItemTouchHelpe... 阅读详情

关于RecyclerView拖动效果

 

先看以下效果图

 

android给了一个官方的工具ItemTouchHelper.Callback

下面上代码,先说以下RecyclerView的使用

<android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rv_list"/>

 


    private RecyclerView rv_list;
    private List<String> date = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rv_list = findViewById(R.id.rv_list);
        for (int i = 0; i < 8; i++) {
            date.add(String.valueOf(i+1));
        }
        LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        ListAdapter adapter = new ListAdapter(date, this);
        rv_list.setLayoutManager(manager);
        rv_list.setAdapter(adapter);
    

    }

适配器

 

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ListViewHolder>{

    private final LayoutInflater inflater;
    private List<String> date;
    private Context context;

    public ListAdapter(List<String> date, Context context) {
        this.date = date;
        this.context = context;
        inflater = LayoutInflater.from(context);
    }

    @NonNull
    @Override
    public ListViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new ListViewHolder(inflater.inflate(R.layout.list_item,viewGroup,false));
    }

    @Override
    public void onBindViewHolder(@NonNull ListViewHolder listViewHolder, int i) {
        if (!TextUtils.isEmpty(date.get(i))) {
            listViewHolder.tv.setText("条目"+i);
            if (i % 2 == 0) {
                listViewHolder.iv.setImageResource(R.mipmap.user_head_img2);
            }else {
                listViewHolder.iv.setImageResource(R.mipmap.user_head_img3);
            }
        }
    }

    @Override
    public int getItemCount() {
        return date.size();
    }

   

    class ListViewHolder extends RecyclerView.ViewHolder{
        ImageView iv;
        TextView tv;
        public ListViewHolder(@NonNull View itemView) {
            super(itemView);
            iv = itemView.findViewById(R.id.iv);
            tv = itemView.findViewById(R.id.tv);
        }
    }

}

好的。此时写完了。效果如图2;

 

 

下面开始拖动效果

自定义一个接口

ListItemTouchHelper

 

public interface ListItemTouchHelper {
    void itemMove(int oldIndex,int newIndex);
    void itemDelete(int index);
}

自定义回调

TouchHelperCallback

public class TouchHelperCallback extends ItemTouchHelper.Callback {
    private ListAdapter adapter;

    public TouchHelperCallback(ListAdapter adapter) {
        this.adapter = adapter;
    }

    @Override
    public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
        int dragFlags = ItemTouchHelper.UP |ItemTouchHelper.DOWN;
        int swipeFlags = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
        return makeMovementFlags(dragFlags,swipeFlags);
    }

    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder1) {
        adapter.itemMove(viewHolder.getAdapterPosition(),viewHolder1.getAdapterPosition());
        return false;
    }

    @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
        adapter.itemDelete(viewHolder.getAdapterPosition());
    }
}

 

具体使用:

适配器实现接口ListItemTouchHelper

  @Override
    public void itemMove(int oldIndex, int newIndex) {
        notifyItemMoved(oldIndex, newIndex);
    }

    @Override
    public void itemDelete(int index) {
        notifyItemRemoved(index);
    }

activity设置

 

  TouchHelperCallback callback = new TouchHelperCallback(adapter);
        ItemTouchHelper helper = new ItemTouchHelper(callback);
        helper.attachToRecyclerView(rv_list);

到此就完成了这个效果了;

下面上一下activity和adapter的完整代码。

 


    private RecyclerView rv_list;
    private List<String> date = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rv_list = findViewById(R.id.rv_list);
        for (int i = 0; i < 8; i++) {
            date.add(String.valueOf(i+1));
        }
        LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        ListAdapter adapter = new ListAdapter(date, this);
        rv_list.setLayoutManager(manager);
        rv_list.setAdapter(adapter);
        TouchHelperCallback callback = new TouchHelperCallback(adapter);
        ItemTouchHelper helper = new ItemTouchHelper(callback);
        helper.attachToRecyclerView(rv_list);

    }

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ListViewHolder>implements ListItemTouchHelper {

    private final LayoutInflater inflater;
    private List<String> date;
    private Context context;

    public ListAdapter(List<String> date, Context context) {
        this.date = date;
        this.context = context;
        inflater = LayoutInflater.from(context);
    }

    @NonNull
    @Override
    public ListViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new ListViewHolder(inflater.inflate(R.layout.list_item,viewGroup,false));
    }

    @Override
    public void onBindViewHolder(@NonNull ListViewHolder listViewHolder, int i) {
        if (!TextUtils.isEmpty(date.get(i))) {
            listViewHolder.tv.setText("条目"+i);
            if (i % 2 == 0) {
                listViewHolder.iv.setImageResource(R.mipmap.user_head_img2);
            }else {
                listViewHolder.iv.setImageResource(R.mipmap.user_head_img3);
            }
        }
    }

    @Override
    public int getItemCount() {
        return date.size();
    }

    @Override
    public void itemMove(int oldIndex, int newIndex) {
        notifyItemMoved(oldIndex, newIndex);
    }

    @Override
    public void itemDelete(int index) {
        notifyItemRemoved(index);
    }

    class ListViewHolder extends RecyclerView.ViewHolder{
        ImageView iv;
        TextView tv;
        public ListViewHolder(@NonNull View itemView) {
            super(itemView);
            iv = itemView.findViewById(R.id.iv);
            tv = itemView.findViewById(R.id.tv);
        }
    }

}

欢迎私信留言讨论。

安卓开发- ItemTouchHelper用法介绍及RecyclerView实现Item拖拽效果 安卓开发 ItemTouchHelper用法 RecyclerView实现Item拖拽效果 阅读详情

相关推荐

Android代码-基于itemtouchhelper,实现左滑菜单,删除确认

itemtouchhelper-extension This library add something for swipe item settling, recover base on the Itemtouchhelper. This used in the repo code-reader Download Sample Screenshot item swipe with spring item swipe with no spring item swipe with recycler view width Installation dependencies { compile 'com.loopeer.library:itemtouchhelperextension:1.0.6' } Usages mCallback = new ItemTouchHelperCallback(); mItemTouchHelper = new ItemTouchHelperExtension(mCallback); mItemTouchHelper.attach

ItemTouchHelper.Callback 详解

ItemTouchHelper是在操作RecyclerView时,堆Item进行长按移动,左右滑动删除效果的一个辅助类,但是我们要考虑,为什么这个辅助类就可以实现移动跟左右删除Item的效果呢?我们的touch事件是怎么作用到RecyclerView的Item上呢?我们通过源码的解析都是可以知道这是为什么的。下面开始:创建一个ItemTouchHelper,需要传入一个继承自ItemTouchHe...

厚德出品,必是精品 1万+

使用基于python的neurora进行表征相似性分析(RSA)

发现了一款用于表征分析的Python API,还是挺方便的,这里简单介绍一下进行表征相似性分析的使用方法。

zjh12312311的博客 2766

RecycleView长按拖动控件 ItemTouchHelper.Callback

继承RecycleView.Adapter其实RecycleView实现长按拖动控件并不难,只要重写 ItemTouchHelper.Callback就好,是实现侧滑删除和拖拽移动的工具类。下面的代码除了ItemTouchHelper.Callback就是普通的RecycleView.Adapter实现过程。这三个方法是必须重写的。

lxjlxj2333的博客 1132

【STM32/GD32】Keil uVision生成bin文件:从编译选项到Bootloader升级实战

本文详细讲解了如何在Keil uVision中配置STM32/GD32工程,使其在编译后自动生成Bootloader升级所需的bin文件。通过解析fromelf工具的使用、构建后命令的配置以及内存布局规划,深入阐述了bin文件在固件升级中的核心作用,并提供了串口Bootloader的实战框架与常见问题解决方案。

weixin_29190169的博客 395

从.har文件到Postman集合:一键转换的完整教程(附避坑指南)

本文详细介绍了如何将.har文件高效转换为Postman集合的完整教程,涵盖基础操作到高级技巧,包括认证信息处理、环境变量提取等痛点问题的解决方案。通过抓包工具记录的.har文件,开发者可以快速生成Postman集合,提升API调试与测试效率,特别适合前后端分离开发模式下的团队协作。

weixin_26795617的博客 384

RecyclerView详解——(三)ItemTouchHelper.Callback拖动和侧滑

是中用于处理手势操作的回调类,通常用于实现项目的拖动(Drag)和滑动删除(Swipe)功能。通过扩展类,你可以自定义手势响应方式以及如何在项目中表现这些手势。

Android 领域开发程序员,希望通过写博客的方式不断的总结提升自己,大家共同进步哦! 995

AI Agent在营销领域的实战策略

本文从第一性原理出发,系统性拆解AI Agent在营销领域的落地逻辑、技术架构、实现方案与实战策略。全文覆盖从基础概念到高级优化的全层级知识:底层理论层面推导营销Agent的效用函数与决策框架;技术架构层面提出"感知-记忆-规划-行动-反思"五组件可落地架构;实践层面提供生产级代码实现、多行业案例与ROI提升方法论;前沿层面探讨多Agent协同、世界模型仿真等下一代技术方向。

操作系统内核探秘的博客 228

%3citem android,Android - 使用ItemTouchHelper.Callback进行RecyclerView拖动

我面临一个可能有人可以解决的问题 . 我需要 create a calendar and allow the user to select a date range by 1) clicking on a start date (this will create a 2 days range by default) and then 2) touching one range border and...

weixin_34284072的博客 185

CCF201803-2 碰撞的小球 python

一些话:已经不知道是第几次做这道题了(大概第三次吧),真的常做常新,每次都有新的细节想法。虽然方法简单粗暴,但好在方便理解,对于我这种菜鸟选手而言。 但在做的过程中,最开始还忽略了输入的小球初始位置有可能是无序的,输出的时候要保持相对位置。CCF真的考验细节,希望上考场时能够认真仔细一点。就酱… #碰撞的小球 #当小球坐标为0或L时,会朝相反方向移动 #当两个小球坐标相等时,会分别转向相反的方向 #计算t秒之后小球的位置 n,L,t = map(int,input().split()) location .

tanya_dre的博客 351

BAPI_OUTB_DELIVERY_CHANGE扩展指南:利用EXTENSION2与SMOD_V50B0001实现自定义字段更新

本文详细解析了如何利用BAPI_OUTB_DELIVERY_CHANGE的EXTENSION2参数与增强点SMOD_V50B0001,在不修改标准代码的前提下,安全、标准地更新SAP交货单的自定义字段。通过清晰的步骤指南和实战代码示例,帮助开发者掌握通过增强字段实现定制化业务需求的完整流程与调试技巧。

fanta的博客 451

【Android 事件分发】ItemTouchHelper 简介 ( 拖动/滑动事件 | ItemTouchHelper.Callback 回调 )

一、ItemTouchHandler 简介、 二、ItemTouchHelper.Callback 自定义实现、 1、设置移动标志 ( 拖动/滑动 )、 三、完整代码实现、 1、主界面、 2、ItemTouchHelper.Callback 回调类、 四、博客资源、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 4305

医疗信创国产化替代目前面临哪些难题?如何利用国产虚拟化技术促进医院信创建设

业务系统众多,存在大量信创改造模糊地带,既有老系统,也有新系统,故障点多,管理难度高,IT人力资源不足,其对硬件的支撑能力也提出了越来越高的要求,由此造成硬件成本、管理成本以及能耗成本都非常高。

云宏winhong的博客 2661

Android 滚动条 拖动,Android开发 RecyclerView实现拖动与滑动ItemTouchHelper

前言RecyclerView依靠ItemTouchHelper,实现item的拖动与滑动功能。使用ItemTouchHelper实现上下拖动的例子首先我们需要继承重写 ItemTouchHelper.Callbackpublic class QuickReplyItemTouchCallback extendsItemTouchHelper.Callback {privateQuickReplyA...

weixin_35564436的博客 535

STM32F4串口接收ATGM336H GPS数据,手把手教你解析NMEA协议并转换经纬度格式

本文详细介绍了如何使用STM32F4开发板通过串口接收ATGM336H GPS模块的NMEA协议数据,并解析GNRMC语句获取经纬度信息。内容涵盖硬件连接、NMEA协议深度解析、数据校验实现以及经纬度格式转换的数学原理与代码实现,为嵌入式开发者提供完整的GPS数据处理解决方案。

weixin_42522575的博客 498

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

RecyclerView长按拖动效果,用ItemTouchHelper实现

RecyclerView长按拖动效果,用ItemTouchHelper实现 话不多说,直接上代码 //NewItemTouchHelper继承自ItemTouchHelper.Callback NewItemTouchHelper helper = new NewItemTouchHelper(context, adapter, info);ItemTouchHelper itemTouchHe

他晓 4509

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

recyclerview item子view点击事件_RecyclerView的ItemTouchHelper学习

ItemTouchHelper的使用ItemTouchHelper可以解释为:Item点击的帮助类,它可以判断帮助我们快速的实现侧滑Swiped、长按拖动Move的效果。如下图的效果,用ItemTouchHelper就可以很简单的实现。1.实现ItemTouchHelper.CallBack接口这个接口我们可以决定是否可以侧滑和拖动,以及方向,并知道侧滑、拖动的执行时的方法回调。clas...

weixin_32821257的博客 728

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android开发 RecyclerView实现拖动与滑动ItemTouchHelper

前言   RecyclerView依靠ItemTouchHelper,实现item的拖动与滑动功能。 了解重写方法   ItemTouchHelper提供了大量的重写方法,让你自己实现需要的组合。需要一一了解。 是否开启长按拖动 @Override public boolean isLongPressDragEnabled() { return false; ...

cherish152的博客 263

RecyclerView实现拖动排序和滑动删除功能

RecyclerView 的拖动排序需要借助一下 ItemTouchHelper 这个类,ItemTouchHelper 类是 Google 提供的一个支持 RecyclerView 滑动和拖动的一个使用类,下面使用该类实现 RecyclerView 的滑动删除和拖动排序功能。 阅读文本之前可以先阅读如下文章: RecyclerView的简单使用 RecyclerView的Item的单击事件 R...

weixin_34174105的博客 217

实现 RecyclerView 可拖动 item 排序的方法

RecyclerView 是 Android 开发中常用的列表控件,但有时需要对列表项进行拖动排序的功能。这样,ItemTouchHelper 就能够监测到用户的触摸操作,并相应地处理。在上面的代码中,定义了拖动和滑动的方向,并实现了 onMove() 方法来处理拖动操作,以及 onSwiped() 方法来处理滑动操作。接下来,需要编写一个自定义的 ItemTouchHelper.Callback 类,用于处理拖动和滑动操作。注意,这里的adapter是要与需要拖动的recyclerview关联的适配器。

m0_64136170的博客 974

利用 ItemTouchHelper 实现 RecyclerView 的侧滑删除

利用 ItemTouchHelper 可以实现 RecyclerView 的侧滑删除和滑动。

yxhuang2008的专栏 728

RecyclerView借助ItemTouchHelper实现拖动和滑动删除功能

RecyclerView是官方推荐取代ListView的空间,如何实现RecyclerView列表元素的拖动呢? 官方提供了ItemTouchHelper类使用步骤如下: 定义ItemTouchHelper.Callback实现类,以下是几个重要的方法 package com.zms.copyapp.helper; import android.suppor

easion_zms的专栏 4846

【RecyclerView】 十五、使用 ItemTouchHelper 实现 RecyclerView 拖动排序 ( ItemTouchHelper 简介 )

一、ItemTouchHelper 简介、 二、RecyclerView 相关资料、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1640

RecyclerView高级进阶总结:ItemTouchHelper实现拖拽和侧滑删除

前言现在RecyclerView的应用越来越广泛了,不同的应用场景需要其作出不同的改变。有时候我们可能需要实现侧滑删除的功能,又或者长按Item进行拖动与其他Item进行位置的交换,但RecyclerView没有提供现成的API供我们操作,但是SDK提供了ItemTouchHelper这样一个工具类帮助我们快速实现以上功能。RecyclerView具体使用在这里不详细说明了,详细了解的话请查看详解...

杨的博客 1万+

RecyclerView ItemTouchHelper

ItemTouchHelper是一个强大的工具,它处理好了关于在RecyclerView上添加拖动排序与滑动删除的所有事情。它是RecyclerView.ItemDecoration的子类。 基本使用   1继承 ItemTouchHelper.Callback 主要方法 方法名 作用 getMovementFlags 在此方法里面我们需要构建两个flag,一个是dragFlags,表示拖动效果支持的方向,另一个是swipeFlags,表示侧滑效果支持的方向。在我们的Demo中

TyearLin的专栏 1077
上一篇: java 时间转换之LocalDate,LocalTime ,LocalDateTime的使用篇一
下一篇: java 时间转换之LocalDate,LocalTime ,LocalDateTime的使用篇二
nades
博客等级 码龄10年 80粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值