在recyclerview中使用其item布局的ViewBinding类需要注意的问题
问题描述
最近在使用RecycerView的瀑布流布局,我想直接用ViewBinding取得item中的一个TextView然后根据position进行赋值。
比如我点击测试标题2,它在日志中应该能打印出测试标题2才对。

但是他却打印出“测试标题0”

按理来说标题应该更点击的位置对的上才对。
但是发现瀑布流的布局根本不是按照数据集里的顺序进行排列的,而是出现了数据错乱重复、点击的位置跟标题对不上的情况。
问题原因
我们每个item不是有一个布局吗?我使用了ViewBinding,他会生成一个binding类。
我在RecyclerView的适配器中没有使用ViewHolder对item布局里的控件进行操作,而是直接通过生成的Binding类进行操作:
@Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {if(getItemViewType(position) == DefaultVals.POST_TYPE_TEXT){mItemTypeTextBinding.userAvatar2.setImageResource(R.drawable.ic_launcher_background);mItemTypeTextBinding.userUnit2.setText(mPostItems.get(position).getUserHouseAddr());mItemTypeTextBinding.postTitle2.setText(mPostItems.get(position).getPostTitle());mItemTypeTextBinding.postContent2.setText(mPostItems.get(position).getPostContent());mItemTypeTextBinding.postTag2.setText(mPostItems.get(position).getPostTag());mItemTypeTextBinding.postDate2.setText(mPostItems.get(position).getPostDate());}
这样会出现有些item是重复的。因为Binding类实例在适配器中只有一个,当我们进行滑动的时候,就会调用onBindViewHolder,而一次onBindViewHolder的调用postion是确定的,里面直接根据position通过binding类来设定布局,这样就会产生很多个相同的item。所以就会出现item重复,继而引发数据错乱,标题对不上位置。
解决
不要在onBindViewHolder中直接通过生成的Binding类来操作控件,老老实实用viewHolder。ViewBinding类本质是解决满屏都是findViewById的问题,只是让你减少了使用大量重复findViewById的工作量,使用它来操作控件要谨慎再谨慎。
建立自己的viewHolder,通过它对item的控件进行操作。
class ViewHolderWithContent extends RecyclerView.ViewHolder{public ImageView userAvatar ;public TextView username ;public TextView userUnit ;public TextView postTitle ;public TextView postContent ;public TextView postTag ;public TextView postDate ;public ViewHolderWithContent(@NonNull View itemView) {super(itemView);userAvatar = itemView.findViewById(R.id.user_avatar2);username = itemView.findViewById(R.id.username2);userUnit = itemView.findViewById(R.id.user_unit2);postContent= itemView.findViewById(R.id.post_content2);postTitle = itemView.findViewById(R.id.post_title2);postTag = itemView.findViewById(R.id.post_tag2);postDate = itemView.findViewById(R.id.post_date2);}}
在onBindViewHolder中通过自己的ViewHolder进行控件操作:
@Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {if(getItemViewType(position) == DefaultVals.POST_TYPE_TEXT){((ViewHolderWithContent)holder).userAvatar.setImageResource(R.drawable.ic_launcher_background);((ViewHolderWithContent)holder).username.setText(mPostItems.get(position).getUsername());((ViewHolderWithContent)holder).userUnit.setText(mPostItems.get(position).getUserHouseAddr());((ViewHolderWithContent)holder).postTitle.setText(mPostItems.get(position).getPostTitle());((ViewHolderWithContent)holder).postContent.setText(mPostItems.get(position).getPostContent());((ViewHolderWithContent)holder).postTag.setText(mPostItems.get(position).getPostTag());((ViewHolderWithContent)holder).postDate.setText(mPostItems.get(position).getPostDate());// mItemTypeTextBinding.userAvatar2.setImageResource(R.drawable.ic_launcher_background);
// mItemTypeTextBinding.userUnit2.setText(mPostItems.get(position).getUserHouseAddr());
// mItemTypeTextBinding.postTitle2.setText(mPostItems.get(position).getPostTitle());
// mItemTypeTextBinding.postContent2.setText(mPostItems.get(position).getPostContent());
// mItemTypeTextBinding.postTag2.setText(mPostItems.get(position).getPostTag());
// mItemTypeTextBinding.postDate2.setText(mPostItems.get(position).getPostDate());}
相关文章:
在recyclerview中使用其item布局的ViewBinding类需要注意的问题
问题描述 最近在使用RecycerView的瀑布流布局,我想直接用ViewBinding取得item中的一个TextView然后根据position进行赋值。 比如我点击测试标题2,它在日志中应该能打印出测试标题2才对。 但是他却打印出“测试标题0” 按理来说标题应该更点击的位置对…...
基于EB工具的TC3xx_MCAL配置开发05_ADC模块硬件Pwm触发Demo配置
目录 1.概述2. Pwm相关配置2.1 PWM->General配置2.2 PWM->PwmChannel配置2.2.1 Reference Pwm通道配置2.2.2 触发ADC采集的Pwm通道配置3. ADC相关配置3.1 AdcHwExtTrigSelect配置4. MCU相关配置4.1 GTM配置4.1.1 McuGtmTomAllocationConf配置4.1.2 GtmTriggerForAdc配置1…...
Qt示例3:用Qt画一个温度计
示例1 以下是用Qt绘制一个简单的温度计的示例代码: #include <QPainter> #include <QWidget> #include <QApplication> class Thermometer : public QWidget { public:Thermometer(QWidget *parent 0); protected:void paintEvent(QPaintEvent …...
全卷积网络FCN
这里写目录标题全卷积网络FCN1、FCN2、FCN上采样3、 FCN具体实现过程转置卷积全卷积网络FCN 引用:http://t.csdn.cn/pDcjL 1、FCN FCN: FCN是对图像进行像素级的分类(也就是每个像素点都进行分类),从而解决了语义级别的图像分割…...
【Linux】基础IO流(上)
文章目录1. 预备知识2. 回忆C接口fopenfputsfprintfsnprintf追加方式—— a以读方式—— r3.操作系统如何进行读写文件操作open操作系统是如何让用户给自己传递标志位的理解标记位的问题新创建文件权限不正确解决 umask的权限write默认不会对原始文件清空系统层面追加系统层面 …...
【C++】类和对象三大特性--多态
文章目录1. 多态的基本概念2. 多态的定义及实现2.1多态的构成条件2.2 虚函数2.3虚函数的重写2.4 虚函数不能重写和检查是否重写 (C11 )2.5 重载、覆盖(重写)、隐藏(重定义)的对比3. 纯虚函数和抽象类3.1 概念3.2 接口继承和实现继承4.多态的实现原理4.1虚…...
【微前端】qiankun + vite + vue3
专栏: 【微前端】什么是微前端【微前端】qiankun【微前端】qiankun vite vue3 一、整体结构 在 qiankun 体系下,一个微前端工程包含一个主应用和多个子应用。本质上,每个工程(主应用)都可以单独开发、运行。 1.1…...
模型部署之TorchScript
一.关于torchscript和jit介绍 1.关于torchscript TorchScript是Pytorch模型(继承自nn.Module)的中间表示,保存后的torchscript模型可以在像C这种高性能的环境中运行 TorchScript是一种从PyTorch代码创建可序列化和可优化模型的方法。任何T…...
修改linux网卡配置文件的文件名
修改linux网卡配置文件的文件名 查看自己系统中网卡配置文件的文件名 #查看网卡的配置文件名,已经网络的状态 ip a查看系统是否可以使用ifconfig命令 #输入命令 ifconfig #出现以下图片表示ifconfig的命令可用。可能出现的错误:ifconfig command no foun…...
年轻人为啥热衷去寺庙?
年轻人的苦,寺庙最清楚。 周末的寺庙挤满了年轻人,北京雍和宫限流了,杭州灵隐寺十八籽的手串限购了,南京鸡鸣寺从地铁站出口就开始排队了...... “上班和上学,你选择哪个?” ”我选择上香“ 工作和学习…...
Java Spring 框架
当今世界,Java Spring 成为了最流行的 Java 开发框架之一。Spring 框架是一个轻量级的、高效的框架,它是 Java 应用程序开发的理想选择。在本文中,我们将深入探讨 Java Spring 框架的特性、优点以及如何使用它来构建高质量的应用程序。 1.Ja…...
基于OpenCV的人脸识别
目录 🥩 前言 🍖 环境使用 🍖 模块使用 🍖 模块介绍 🍖 模块安装问题: 🥩 OpenCV 简介 🍖 安装 OpenCV 模块 🥩 OpenCV 基本使用 🍖 读取图片 🍗 【…...
一文带你看懂电压放大器和功率放大器的区别
很多人对于电压放大器和功率放大器总是分不太清,在实际应用过程中,电压放大器和功率放大器所起到的作用都是相同的。对于功率放大器和电压放大器的区别,今天就让安泰电子来带我们一起看看。功率放大器和电压放大器的主要区别是:功…...
C++虚函数与多态
C虚函数与多态虚函数抽象类纯虚函数虚析构函数多态虚函数的几个问题纯虚函数和ADT虚函数 virtual修饰的成员函数就是虚函数, 1.虚函数对类的内存影响:增加一个指针类型大小(32位和64位) 2.无论有多少个虚函数,只增加一…...
蓝桥杯Web前端练习-----渐变色背景生成器
介绍 相信做过前端开发的小伙伴们对渐变色在 UI 设计中的流行度一定不陌生,网页上也时常可以看到各类复杂的渐变色生成工具。使用原生的 CSS 变量加一些 JS 函数就能做出一个简单的渐变色背景生成器。 现在渐变色生成器只完成了颜色选取的功能,需要大家…...
Python中的微型巨人-Flask
文章目录前言主要内容优点及特性主要使用创建实例定义路由获取请求定制响应渲染Jinja2模板重定向和反向解析抛出HTTP异常总结更多宝藏前言 😎🥳😎🤠😮🤖🙈💭🍳…...
密码学中的承诺
Commitment 概述 密码学承诺是一个涉及两方的二阶段交互协议,双方分别为承诺方和接收方。简述来说,它的功能涵盖不可更改性和确定性。 承诺方发送的消息密文,一旦发出就意味着不会再更改,而接收方收到这个消息可以进行验证结果。…...
redis入门实战一、五种数据结构的基本操作(二)
redis入门实战一、五种数据结构的基本操作【二】 一、String1)、set2)、getset3)、msetnx 给多个元素赋值,原子操作4)、字符串 追加 & 取部分数据5)、数值可以做加减,指定增量大小6)、获取长度7)、 bitmap①、setbit②、bitop 二进制与或运算(效率高)③、bitcou…...
day13 模块和异常捕获总结
day13 模块和异常捕获 一、生成器 (一)、什么是生成器 1)容器(是一种可以创建多个数据的容器),生成器中保存的是创建数据的方法,而不是数据本身。2)特点: a. 打印生成…...
【Linux】进程优先级 环境变量
进程优先级 环境变量 一、进程优先级1、基本概念2、查看以及修改系统进程的优先级3、一些其他的关于进程优先级的指令和函数调用4、与进程优先级有关的一些进程性质二、环境变量1、基本概念2、和环境变量相关的命令3、Linux中的常见环境变量介绍4、环境变量的组织方式以及在C代…...
SerialMP3库:GD3300D/TD5580A串口MP3模块驱动详解
1. SerialMP3 库概述:面向 GD3300D/TD5580A 串口 MP3 播放模块的嵌入式驱动框架SerialMP3 是一个专为基于 GD3300D 或 TD5580A 音频解码芯片的串口 MP3 播放板设计的 Arduino 兼容库。该库并非通用音频处理中间件,而是一个硬件协议抽象层(Har…...
英雄联盟段位修改完整解决方案:LeaguePrank免费工具终极指南
英雄联盟段位修改完整解决方案:LeaguePrank免费工具终极指南 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 还在为单调的游戏段位显示感到乏味吗?LeaguePrank这款创新的免费工具将彻底改变你的英雄联盟…...
解决AtlasOS系统中Xbox控制器驱动问题的5个实用技巧
解决AtlasOS系统中Xbox控制器驱动问题的5个实用技巧 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atlas …...
从聊天机器人到业务执行者:Agentic Orchestration 如何重构 Java 后端体系
引言 在 RAG 1.0 时代,我们费尽心思让 AI“说得对、答得准”; 而进入 2026 年的 Agentic Orchestration(智能体编排) 时代,我们的目标已经变成:让 AI 做得对、跑得稳、能闭环。 用户说“帮我把昨天买贵的衣…...
保姆级教程:在PVE上5分钟搞定一个Ubuntu LXC容器,并配置好Docker环境
5分钟极速部署:PVE上Ubuntu LXC容器与Docker环境全自动配置指南 刚接触家庭服务器的朋友往往被复杂的虚拟化环境劝退。今天分享的这套方案,能让你在PVE平台上用不到5分钟时间,快速获得一个开箱即用的Ubuntu容器,并预装好Docker环境…...
Aircrack-ng进阶指南:如何高效生成和使用密码字典提升破解成功率
Aircrack-ng高阶实战:密码字典工程的艺术与科学 在网络安全领域,密码字典的质量往往决定了渗透测试的成败。就像锁匠需要精心打造的开锁工具一样,安全研究人员需要构建精准高效的密码字典来评估系统安全性。本文将深入探讨如何通过系统化的字…...
ComfyUI视频合成节点修复指南:从诊断到优化的完整解决方案
ComfyUI视频合成节点修复指南:从诊断到优化的完整解决方案 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 问题诊断:定位VHS_VideoCombine…...
企业如何防御LockBit 3.0?从IOC到实战检测规则编写指南
企业级防御实战:LockBit 3.0勒索病毒全维度对抗指南 1. 勒索病毒威胁态势与企业防御挑战 2023年全球网络安全报告显示,勒索软件攻击同比增长47%,其中LockBit系列占比高达28%。不同于传统恶意软件,LockBit 3.0采用模块化设计&#…...
鸽姆智库(GG3M Think Tank)核心优势 |Core Strengths of GG3M Think Tank
鸽姆智库(GG3M Think Tank)核心优势鸽姆智库(GG3M Think Tank)的核心优势体现在理论原创性、技术架构创新、东方智慧深度融入与全场景工程落地能力四大维度,构成全球首个以东方哲学为根基的“文明级操作系统”…...
原神抽卡数据分析终极指南:genshin-wish-export完全使用教程
原神抽卡数据分析终极指南:genshin-wish-export完全使用教程 【免费下载链接】genshin-wish-export biuuu/genshin-wish-export - 一个使用Electron制作的原神祈愿记录导出工具,它可以通过读取游戏日志或代理模式获取访问游戏祈愿记录API所需的authKey。…...
