当前位置: 首页 > news >正文

RecycleView刷新功能

RecycleView刷新某一个Item,或这某一个Item中某一个View。

这样的需求,在实际的开发中是很普遍的。

在数据变化后需要刷新列表。

刷新列表有三种方式:

前两种大家应该很熟,第三中会有点陌生。

 那么这三种方式,有什么却别呢?

  public void updateData() {notifyDataSetChanged();}public void updateData(int pos) {notifyItemChanged(pos);}public void updateData(int pos, Object payload) {notifyItemChanged(pos, payload);}

先看第一种:notifyDataSetChanged()

这个就属于暴力刷新了,他会刷新整个可见的item列表。刷新效率很差。我只想要更新某个Item中的TextView,但是这种方式,会导致全部Item列表重新绘制一遍。

    findViewById(R.id.button1).setOnClickListener(v -> {int pos = 0;Person person = list.get(pos);person.name = "update";person.age = 44;adapter.updateData();});public void updateData() {notifyDataSetChanged();}

从日志中可以看出来,这种刷新方式,会把所有的Item重新绘制一遍。

再看第二种刷新方式: notifyItemChanged(pos);

 findViewById(R.id.button2).setOnClickListener(v -> {int pos = 0;Person person = list.get(pos);person.name = "update";person.age = 55;adapter.updateData(pos);});public void updateData(int pos) {notifyItemChanged(pos);}

   这种方式会根据传进来的pos来刷新对应的某一个Item。但是Item中会包含其他的View,

也会导致其他的View跟着刷新,虽然有了较大的优化,但是还是有一些画蛇添足。

看日志:

从日志可以看出,的确刷只刷新了某一个Item。但是整个Item中定义的View也会跟着一起绘制,

会执行onLayout,onMeasure,onDraw三个绘制方式。

我只修改了某个View,只需要重新绘制更新的VIew就行,没有更新的不用跟着计算。

再看第三种方式,

传进去了一个标识,需要在重写onBindViewHolder的重载方法。

 findViewById(R.id.button3).setOnClickListener(v -> {int pos = 0;Person person = list.get(pos);person.name = "payload";person.age = 66;adapter.updateData(pos, "name");});
    public void updateData(int pos, Object payload) {notifyItemChanged(pos, payload);}

 根据传进来的标识,只改变,需要修改的VIew。前提是要修改的View的大小不会变化,只改变状态,因为Item中其他的View不刷新。如果大小改变的话,可能会导致布局跟着变,这时就得需要item去重新计算来绘制了。

 @Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position,             @NonNull List<Object> payloads) {Log.e("nyz", "onBindViewHolder pos " + position);if (!payloads.isEmpty() && payloads.get(0).equals("name")) {Log.e("nyz", "update name");Person person = list.get(position);((MyViewHolder) holder).nameTv.setText(person.name);} else {Log.e("nyz", "update item");super.onBindViewHolder(holder, position, payloads);}}

看日志:

确实只修改了需要修改的View,并没有导致整个View进行重新绘制。

代码下载:https://download.csdn.net/download/niuyongzhi/88382724

相关文章:

RecycleView刷新功能

RecycleView刷新某一个Item&#xff0c;或这某一个Item中某一个View。 这样的需求&#xff0c;在实际的开发中是很普遍的。 在数据变化后需要刷新列表。 刷新列表有三种方式&#xff1a; 前两种大家应该很熟&#xff0c;第三中会有点陌生。 那么这三种方式&#xff0c;有什…...

目标检测如何演变:从区域提议和 Haar 级联到零样本技术

目录 一、说明 二、目标检测路线图 2.1 路线图&#xff08;一般&#xff09; 2.2 路线图&#xff08;更传统的方法&#xff09; 2.3 路线图&#xff08;深度学习方法&#xff09; 2.4 对象检测指标的改进 三、传统检测方法 3.1 维奥拉-琼斯探测器 (2001) 3.2 HOG探测器…...

聊一聊国内大模型公司,大模型面试心得、经验、感受

有着过硬的技术却无处可用是不是很苦恼呢&#xff0c;大家在面试时是不是也积累了一些经验呢&#xff0c;本文详细总结了大佬在大模型面试时的一些经验及感悟&#xff0c;希望对大家面试找工作有所帮助。 2023年&#xff0c;大模型突然国内火了起来&#xff0c;笔者就面了一些…...

【分布式微服务】feign 异步调用获取不到ServletRequestAttributes

公司调用接口的时候使用feign,但是服务之间还是使用了鉴权,需要通过RequestInterceptor 去传递uuid 概念 OpenFeign是一个声明式的Web服务客户端,它使得编写HTTP客户端变得更简单。在使用OpenFeign进行异步调用时,你可以通过配置来实现。但是,如果你在配置或调用过程中遇…...

c#编程里面最复杂的技术问题有哪些

C#编程中最复杂的技术问题通常涉及高级主题和复杂的应用场景。以下是一些可能被认为是C#编程中最复杂的技术问题&#xff1a; 1. **多线程和并发编程&#xff1a;** 处理多线程和并发问题涉及到锁定、线程同步、死锁避免、线程安全性和性能优化等方面的知识。编写高效且线程安…...

github代码提交过程详细介绍

1、下载github上面的代码 &#xff08;1&#xff09;在github网站上&#xff0c;找到想要下载的代码仓库界面&#xff0c;点击Code选项就可以看到仓库的git下载地址&#xff1b; &#xff08;2&#xff09;使用命令下载&#xff1a;git clone 地址&#xff1b; 2、配置本地git…...

Linux -- 使用多张gpu卡进行深度学习任务(以tensorflow为例)

在linux系统上进行多gpu卡的深度学习任务 确保已安装最新的 TensorFlow GPU 版本。 import tensorflow as tf print("Num GPUs Available: ", len(tf.config.list_physical_devices(GPU)))1、确保你已经正确安装了tensorflow和相关的GPU驱动&#xff0c;这里可以通…...

Mendix中的依赖管理:npm和Maven的应用

序言 在传统java开发项目中&#xff0c;我们可以利用maven来管理jar包依赖&#xff0c;但在mendix项目开发Custom Java Action时&#xff0c;由于目录结构有一些差异&#xff0c;我们需要自行配置。同样的&#xff0c;在mendix项目开发Custom JavaScript Action时&#xff0c;…...

自定义hooks之useLastState、useSafeState

自定义hooks之useLastState、useSafeState useLastState 在某些情况下&#xff0c;可能需要知道状态的历史值&#xff0c;例如&#xff0c;希望在状态变化时执行某些操作&#xff0c;但又需要访问上一个状态的值&#xff0c;以便进行比较或其他操作。自定义 React Hook 可以帮…...

前端判断: []+[], []+{}, {}+[], {}+{}

本质: 二元操作符规则 一般判断规则: 如果操作数是对象,则对象会转换为原始值如果其中一个操作数是字符串的话,另一个操作数也会转换成字符串,进行字符串拼接否则,两个操作数都将转换成数字或NaN,进行加法操作 转为原始数据类型的值的方法: Symbol.ToPrimitiveObject.protot…...

el-input-number/el-input 实现实时输入数字转换千分位(失焦时展示千分位)

el-input-number/el-input 实现实时输入数字转换千分位(失焦时展示千分位) 我把封装指令的代码放在了main.js,代码如下 // 金额展示千分位 Vue.directive("thousands", {inserted: function(el, binding) {// debugger// 获取input节点if (el.tagName.toLocaleUppe…...

一篇博客学会系列(2)—— C语言中的自定义类型 :结构体、位段、枚举、联合体

目录 前言 1、结构体 1.1、结构体类型的声明 1.2、特殊的结构体类型声明 1.3、结构体的自引用 1.4、结构体的定义和初始化 1.5、结构体成员变量的调用 1.6、结构体内存对齐 1.6.1、offsetof 1.6.2、结构体大小的计算 1.6.3、为什么存在内存对齐&#xff1f; 1.7、…...

KongA 任意用户登录漏洞分析

KongA 简介 KongA 介绍 KongA 是 Kong 的一个 GUI 工具。GitHub 地址是 https://github.com/pantsel/konga 。 KongA 概述 KongA 带来的一个最大的便利就是可以很好地通过UI观察到现在 Kong 的所有的配置&#xff0c;并且可以对于管理 Kong 节点 漏洞成因 未设置TOKEN_SECRE…...

吉力宝:智能科技鞋品牌步力宝引领传统产业创新思维

在现代经济环境下&#xff0c;市场经济下产品的竞争非常的激烈&#xff0c;如果没有营销&#xff0c;产品很可能不被大众认可&#xff0c;酒香也怕巷子深&#xff0c;许多传统产业不得不面临前所未有的挑战。而为了冲出这个“巷子”&#xff0c;许多企业需要采用创新思维&#…...

【IPC 通信】信号处理接口 Signal API(1)

收发信号思想是 Linux 程序设计特性之一&#xff0c;一个信号可以认为是一种软中断&#xff0c;通过用来向进程通知异步事件。 本文讲述的 信号处理内容源自 Linux man。本文主要对各 API 进行详细介绍&#xff0c;从而更好的理解信号编程。 信号概述 遵循 POSIX.1&#xff0c;…...

使用GDIView排查GDI对象泄漏导致的程序UI界面绘制异常问题

目录 1、问题说明 2、初步分析 3、查看任务管理器&#xff0c;并使用GDIView工具分析 4、GDIView可能对Win10兼容性不好&#xff0c;显示的GDI对象个数不太准确 5、采用历史版本比对法&#xff0c;确定初次出现问题的时间点&#xff0c;并查看前一天的代码修改记录 6、将…...

蓝桥等考Python组别一级001

第一部分:选择题 1、Python L1 (15分) 下面哪个不是Python的编程环境?( ) Python在线编程IDLEPyCharmScratch正确答案:D 2、Python L1(15分) 世界上第一台通用电子计算机ENIAC是在( )诞生的。 美国英国日本德国正确答案:A 3、Python L1(20分) 关于P…...

Unity之Hololens2开发 如何接入的MRTK OpenXR Plugin

一.前言 什么是Hololens? Hololens是由微软开发的一款混合现实头戴式设备,它将虚拟内容与现实世界相结合,为用户提供了沉浸式的AR体验。Hololens通过内置的传感器和摄像头,能够感知用户的环境,并在用户的视野中显示虚拟对象。这使得用户可以与虚拟内容进行互动,将数字信…...

Ubuntu系统Linux内核安装和使用

安装&#xff1a; 检查树莓派Linux版本&#xff0c;我的是6.1 uname -r 内核下载链接&#xff1a; Raspberry Pi GitHub 找对应版本下载 导入之后&#xff0c;解压安装即可 unzip linux-rpi-6.1.y.zip 其他内容 treee 指令安装 sudo apt-get install tree 使用这…...

数学术语之源——群同态的“核(kernel)”

1. “kernel”这个术语在群论中的起源 Ivar Fredholm 在 1903 年的第27期Acta Math 数学学报发表的一篇关于“积分方程(INTEGRAL EQUATIONS)”的著名论文(“关于一类函数方程(Sur une classe des quations fonctionnelles)”)中使用了法语“noyau(核)”(365-390页)。 David …...

怎么看待OpenClaw?

特别附&#xff1a;"词元"为何是理解这一切的关键引言&#xff1a;一只龙虾爬到Linux头顶2026年3月&#xff0c;GitHub星标榜上出现了一个奇观——一只"龙虾"爬到了Linux头顶。OpenClaw&#xff0c;这个从个人项目演变成的AI智能体框架&#xff0c;在不到四…...

【递归算法】全排列 Ⅱ

题目链接 文章摘要&#xff1a; 本文解析了LeetCode上"全排列II"问题&#xff0c;要求在包含重复数字的数组中返回所有不重复的全排列。通过分析决策树&#xff0c;指出需在标准全排列解法基础上增加剪枝策略&#xff0c;避免重复结果。详细讲解了两种剪枝思路&#…...

实战级SQL注入测试技巧揭秘

目录 一、高阶注入判断技巧&#xff08;不爆数据&#xff0c;只测漏洞&#xff09; 1. 布尔盲注&#xff08;Boolean-based&#xff09; 2. 时间盲注&#xff08;Time-based&#xff09; 3. 报错注入&#xff08;Error-based&#xff09; 二、高阶利用手法&#xff08;实战…...

提升Blender渲染效率:立方盒反射烘培与材质优化指南

提升Blender渲染效率&#xff1a;立方盒反射烘培与材质优化指南 在3D创作领域&#xff0c;渲染效率与质量始终是设计师面临的核心挑战。Blender作为开源三维软件的代表&#xff0c;其渲染引擎的灵活性与强大功能为艺术家提供了无限可能&#xff0c;但同时也对硬件资源提出了较高…...

Maven阿里云镜像配置详解:提升依赖下载速度的终极方案

Maven阿里云镜像配置实战&#xff1a;突破国内依赖下载瓶颈的完整指南 每次打开IDE准备大干一场时&#xff0c;最扫兴的莫过于看着Maven依赖下载进度条像蜗牛一样缓慢爬行。作为Java开发者&#xff0c;我们都经历过中央仓库下载速度只有几十KB/s的煎熬时刻——特别是当团队新成…...

嵌入式软件架构设计与实践指南

## 1. 嵌入式软件架构设计概述### 1.1 嵌入式系统发展现状 现代嵌入式系统硬件性能已实现质的飞跃&#xff0c;以Marvell PXA3xx系列处理器为例&#xff0c;其主频可达800MHz&#xff0c;集成USB、WIFI、2D图形加速和32位DDR内存控制器。软件层面&#xff0c;Symbian、Linux、W…...

基于Vue的博物馆智能导览系统[vue]-计算机毕业设计源码+LW文档

摘要&#xff1a;本文介绍了一款基于Vue框架开发的博物馆智能导览系统。系统旨在利用现代Web技术提升参观者在博物馆中的体验&#xff0c;通过提供便捷的博物馆信息查询、个性化的导览路线规划等功能&#xff0c;满足不同用户的需求。本文详细阐述了系统的开发背景、相关技术、…...

2025年06月CCF-GESP编程能力等级认证Scratch图形化编程一级真题解析

本文收录于《Scratch等级认证CCF-GESP图形化真题解析》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 3 分,共 30 分) 第 1 题 2025 年 4 月 19 日在北京举行了一场颇为瞩目的人形机器人半程马拉松赛。比赛期间,跑动着的机器人会利用身上安装…...

告别两两配对!用Fast3R Transformer一次搞定1000张图的多视角重建(保姆级原理解读)

Fast3R Transformer&#xff1a;颠覆多视角重建的并行化革命 想象一下&#xff0c;你面前摆着1000张从不同角度拍摄的埃菲尔铁塔照片。传统方法需要将这些照片两两配对&#xff0c;进行数百万次重复计算&#xff0c;而Fast3R只需一次前向传播就能完成所有视角的联合重建——这就…...

C/C++进阶知识1.0

C/C进阶知识 1.delete与delete[ ] ClassA *pclassanew ClassA[5]; delete pclassa; 与 int *p new int[5]; delete p; 1.1内置类型 不调用析构函数 1.2自定义类型 析构函数调用一次 2.内存知识 2.1栈堆增长方向不同的原因&#xff1a; 栈向下增长堆向上增长的设计目的是…...