首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android ItemTouchHelper notifyItemChanged只能运行一次

Android ItemTouchHelper是一个用于处理RecyclerView中Item拖拽和滑动删除的辅助类。notifyItemChanged是RecyclerView.Adapter中的一个方法,用于通知RecyclerView某个Item的数据发生了变化,需要进行刷新。

在使用ItemTouchHelper进行拖拽或滑动删除时,通常会在拖拽或删除操作完成后调用notifyItemChanged方法来更新相关Item的数据。但是需要注意的是,notifyItemChanged方法只能运行一次,即只能刷新一次指定位置的Item数据。

如果需要多次刷新同一个Item的数据,可以通过以下步骤来实现:

  1. 在RecyclerView.Adapter中定义一个变量,用于记录需要刷新的Item位置。
  2. 在ItemTouchHelper的相关回调方法中,根据拖拽或删除操作的完成情况,更新记录的Item位置。
  3. 在RecyclerView.Adapter的onBindViewHolder方法中,判断当前位置是否需要刷新,如果需要则执行刷新操作,并将记录的Item位置重置为无效值。

以下是一个示例代码:

代码语言:txt
复制
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private List<String> mData;
    private int mRefreshPosition = RecyclerView.NO_POSITION; // 初始值为无效值

    // ...

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        // 绑定数据到ViewHolder
        holder.bindData(mData.get(position));

        // 判断当前位置是否需要刷新
        if (position == mRefreshPosition) {
            // 执行刷新操作
            // ...
            
            // 将记录的Item位置重置为无效值
            mRefreshPosition = RecyclerView.NO_POSITION;
        }
    }

    public void refreshItem(int position) {
        // 更新记录的Item位置
        mRefreshPosition = position;
        // 刷新指定位置的Item数据
        notifyItemChanged(position);
    }

    // ...
}

在上述示例中,refreshItem方法用于更新需要刷新的Item位置,并调用notifyItemChanged方法进行刷新。在onBindViewHolder方法中,判断当前位置是否需要刷新,如果需要则执行刷新操作,并将记录的Item位置重置为无效值。

这样,就可以实现多次刷新同一个Item的数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

RecyclerView 必知必会

animateChange(): 在显式调用notifyItemChanged()或notifyDataSetChanged()时被调用。...runPendingAnimations(): RecyclerView动画的执行方式并不是立即执行,而是每帧执行一次,比如两帧之间添加了多个Item,则会将这些将要执行的动画Pending住,保存在成员变量中...这个问题的描述是:当Item视图中有图片和文字,当更新文字并调用notifyItemChanged()时,文字改变的同时图片会闪一下。...拖拽、侧滑删除 Android提供了ItemTouchHelper类,使得RecyclerView能够轻易地实现滑动和拖拽,此处我们要实现上下拖拽和侧滑删除。...然后通过以下代码为RecyclerView设置该滑动、拖拽功能: ItemTouchHelper helper = new ItemTouchHelper(new SimpleItemTouchCallback

2.5K70

RecyclerView必知必会

基本概念 RecyclerView是Android 5.0提出的新UI控件,位于support-v7包中,可以通过在build.gradle中添加compile 'com.android.support...runPendingAnimations(): RecyclerView动画的执行方式并不是立即执行,而是每帧执行一次,比如两帧之间添加了多个Item,则会将这些将要执行的动画Pending住,保存在成员变量中...具体实现如下: 拖拽、侧滑删除 Android提供了ItemTouchHelper类,使得RecyclerView能够轻易地实现滑动和拖拽,此处我们要实现上下拖拽和侧滑删除。...首先创建一个继承自ItemTouchHelper.Callback的类,并重写以下方法: getMovementFlags(): 设置支持的拖拽和滑动的方向,此处我们支持的拖拽方向为上下,滑动方向为从左到右和从右到左...---- 作者简介:damonxia(夏正冬),天天P图Android工程师

4.6K20

Android 事件分发】ItemTouchHelper 实现拖动排序

事件传递机制 七 ) 【Android 事件分发】ItemTouchHelper 简介 ( 拖动/滑动事件 | ItemTouchHelper.Callback 回调 ) 【Android 事件分发...】ItemTouchHelper 实现侧滑删除 ( 设置滑动方向 | 启用滑动操作 | 滑动距离判定 | 滑动速度判定 | 设置动画时间 | 设置侧滑触发操作 ) 【Android 事件分发】ItemTouchHelper...实现拖动排序 ( 设置滑动方向 | 启启用长按拖动功能 | 拖动距离判定 | 设置拖动触发操作 ) ---- 文章目录 Android 事件分发 系列文章目录 一、ItemTouchHelper.Callback...public float getMoveThreshold(@NonNull RecyclerView.ViewHolder viewHolder) { // 该案例中, 拖动操作只能上下进行...public float getMoveThreshold(@NonNull RecyclerView.ViewHolder viewHolder) { // 该案例中, 拖动操作只能上下进行

2.1K10

RecyclerView 必知必会

基本概念 RecyclerView是Android 5.0提出的新UI控件,位于support-v7包中,可以通过在build.gradle中添加compile 'com.android.support...runPendingAnimations(): RecyclerView动画的执行方式并不是立即执行,而是每帧执行一次,比如两帧之间添加了多个Item,则会将这些将要执行的动画Pending住,保存在成员变量中...拖拽、侧滑删除 Android提供了ItemTouchHelper类,使得RecyclerView能够轻易地实现滑动和拖拽,此处我们要实现上下拖拽和侧滑删除。...首先创建一个继承自ItemTouchHelper.Callback的类,并重写以下方法: getMovementFlags(): 设置支持的拖拽和滑动的方向,此处我们支持的拖拽方向为上下,滑动方向为从左到右和从右到左...作者简介:damonxia(夏正冬),天天P图Android工程师

4.1K90

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

Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...事件传递机制 七 ) 【Android 事件分发】ItemTouchHelper 简介 ( 拖动/滑动事件 | ItemTouchHelper.Callback 回调 ) 【Android 事件分发...】ItemTouchHelper 实现侧滑删除 ( 设置滑动方向 | 启用滑动操作 | 滑动距离判定 | 滑动速度判定 | 设置动画时间 | 设置侧滑触发操作 ) 【Android 事件分发】ItemTouchHelper...进行处理 ; 如 : 侧滑删除 功能 , 条目位置拖动交换 功能 , 就可以使用 ItemTouchHandler 实现 ; 如果 RecyclerView 没有添加 ItemTouchHandler , 只能上下滚动...; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup

1.7K10

Android 事件分发】ItemTouchHelper 事件分发源码分析 ( 绑定 RecyclerView )

Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...事件传递机制 七 ) 【Android 事件分发】ItemTouchHelper 简介 ( 拖动/滑动事件 | ItemTouchHelper.Callback 回调 ) 【Android 事件分发...】ItemTouchHelper 实现侧滑删除 ( 设置滑动方向 | 启用滑动操作 | 滑动距离判定 | 滑动速度判定 | 设置动画时间 | 设置侧滑触发操作 ) 【Android 事件分发】ItemTouchHelper...) ---- 文章目录 Android 事件分发 系列文章目录 一、ItemTouchHelper 事件分发源码分析入口 二、ItemTouchHelper 绑定 RecyclerView 源码分析...} } 在上述 drawVertical 和 drawHorizontal 方法中 , 利用 Canvas 进行绘图 ; 在 RecyclerView.ItemDecoration 中 , 不仅仅只能绘制分割线

37420

Android 事件分发】ItemTouchHelper 实现侧滑删除

Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...事件传递机制 七 ) 【Android 事件分发】ItemTouchHelper 简介 ( 拖动/滑动事件 | ItemTouchHelper.Callback 回调 ) 【Android 事件分发...】ItemTouchHelper 实现侧滑删除 ( 设置滑动方向 | 启用滑动操作 | 滑动距离判定 | 滑动速度判定 | 设置动画时间 | 设置侧滑触发操作 ) 【Android 事件分发】ItemTouchHelper...实现拖动排序 ( 设置滑动方向 | 启启用长按拖动功能 | 拖动距离判定 | 设置拖动触发操作 ) ---- 文章目录 Android 事件分发 系列文章目录 一、ItemTouchHelper.Callback...public float getMoveThreshold(@NonNull RecyclerView.ViewHolder viewHolder) { // 该案例中, 拖动操作只能上下进行

56820

Android RecyclerView使用简述

binding.rvText.setLayoutManager(new LinearLayoutManager(this)); } } 那么后面添加视图的点击事件和子控件的处理,我这里就一步到位了,一次性写好...五、RecyclerView下拉刷新和上拉加载   在日常使用中,RecyclerView的数据并不是一次性都加载出来的,会有分页,重新加载等操作,而手机上操作就是下拉刷新和上拉加载。...② ItemTouchHelper 在initView()添加如下代码: ItemTouchHelper helper = new ItemTouchHelper(new ItemTouchHelper.Callback...int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;   这里的swipeFlags的值是可以组合的,你是单独设置ItemTouchHelper.START...| ItemTouchHelper.DOWN | ItemTouchHelper.START | ItemTouchHelper.END; //控制快速滑动的方向 int swipeFlags

2.3K21

Android笔记: 使用RecyclerView打造可拖拽的GridView

效果图如下:(gif图有点顿卡,其实运行是很流畅的) demo下载地址: DragRecyclerView 如何实现 那么是如何实现的呢?...我们只需要实例化一个ItemTouchHelper,然后关联到RecyclerView就OK了: itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback...()); itemTouchHelper.attachToRecyclerView(recyclerView); 构造方法中需要一个ItemTouchHelper.Callback,ItemTouchHelper...详见demo 开始拖拽时震动 支付宝的拖拽网格在长按后开始拖拽时会有一次短时间的震动提示用户开始拖拽了,很友好的交互,我们也加一个: 添加权限: 在开始拖拽时添加下面代码: //获取系统震动服务 Vibrator vib = (Vibrator) activity.getSystemService

1.5K31

Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 )

事件传递机制 七 ) 【Android 事件分发】ItemTouchHelper 简介 ( 拖动/滑动事件 | ItemTouchHelper.Callback 回调 ) 【Android 事件分发...】ItemTouchHelper 实现侧滑删除 ( 设置滑动方向 | 启用滑动操作 | 滑动距离判定 | 滑动速度判定 | 设置动画时间 | 设置侧滑触发操作 ) 【Android 事件分发】ItemTouchHelper...实现拖动排序 ( 设置滑动方向 | 启启用长按拖动功能 | 拖动距离判定 | 设置拖动触发操作 ) 【Android 事件分发】ItemTouchHelper 事件分发源码分析 ( 绑定 RecyclerView...) 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 ) ---- 文章目录 Android 事件分发 系列文章目录...涉及到的本博客相关源码 四、博客资源 一、OnItemTouchListener 事件监听器引入 ---- 在上一篇博客 【Android 事件分发】ItemTouchHelper 事件分发源码分析

1.8K20

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

笔者使用 RecyclerView 的 ItemTouchHelper 来实现这个效果,过程非常简单。为了学习,这里顺便实现了一下侧滑删除。...从构造器: ItemTouchHelper(ItemTouchHelper.Callback callback) 可以看出,我们需要一个 ItemTouchHelper.Callback 去构造 ItemTouchHelper...ItemTouchHelper.Callback 官方提供了一个实现类 ItemTouchHelper.SimpleCallback() ,它的使用很简单,但为了得到更高的定制性,这里我们不使用它,有兴趣的朋友可以去尝试一下...| ItemTouchHelper.DOWN; //向右侧滑,若有其他需求同理 int swipeFlags = ItemTouchHelper.RIGHT; return makeMovementFlags...mItemTouchHelper.attachToRecyclerView(recyclerView); 运行效果: ?

1.3K11

Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )

事件传递机制 七 ) 【Android 事件分发】ItemTouchHelper 简介 ( 拖动/滑动事件 | ItemTouchHelper.Callback 回调 ) 【Android 事件分发...】ItemTouchHelper 实现侧滑删除 ( 设置滑动方向 | 启用滑动操作 | 滑动距离判定 | 滑动速度判定 | 设置动画时间 | 设置侧滑触发操作 ) 【Android 事件分发】ItemTouchHelper...实现拖动排序 ( 设置滑动方向 | 启启用长按拖动功能 | 拖动距离判定 | 设置拖动触发操作 ) 【Android 事件分发】ItemTouchHelper 事件分发源码分析 ( 绑定 RecyclerView...) 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 ) 【Android 事件分发】ItemTouchHelper...方法 2、moveIfNecessary 方法 二、ItemTouchHelper 涉及到的本博客相关源码 三、博客资源 一、onTouchEvent 事件消费源码分析 ---- 在上一篇博客 【Android

1.1K20

Material Design 在 Android 中的应用

为了提高咱们程序员发言的积极性,增添技术部的沟通氛围,决定之前的分享形式不变,但是改为月末一次,技术部的分享每周一次。主题可以是当前部门的相关技术,当然最好是能够让大众听懂。...我分三部分准备: APP准备 文档准备 Keynote准备 一、APP准备 项目已经上传到GitHub上:AndroidMD 运行效果 ? 花了两个多小时做了这个APP,功能简单,主题明确。...三、总结 这应该是本人第一次技术分享,除了内容准备的还算充分,分享的过程不是很满意。...创建实现ItemTouchHelper.Callback的类 internal inner class ItemTouchHelperCallback : ItemTouchHelper.Callback...or ItemTouchHelper.DOWN val swipeFlags = ItemTouchHelper.START or ItemTouchHelper.END

1.2K20
领券