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

在recyclerview中使用其item布局的ViewBinding类需要注意的问题

问题描述

最近在使用RecycerView的瀑布流布局,我想直接用ViewBinding取得item中的一个TextView然后根据position进行赋值。

比如我点击测试标题2,它在日志中应该能打印出测试标题2才对。

在这里插入图片描述

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

在这里插入图片描述

按理来说标题应该更点击的位置对的上才对。
但是发现瀑布流的布局根本不是按照数据集里的顺序进行排列的,而是出现了数据错乱重复、点击的位置跟标题对不上的情况。

问题原因

我们每个item不是有一个布局吗?我使用了ViewBinding,他会生成一个binding类。
我在RecyclerView的适配器中没有使用ViewHolderitem布局里的控件进行操作,而是直接通过生成的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类来操作控件,老老实实用viewHolderViewBinding类本质是解决满屏都是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绘制一个简单的温度计的示例代码&#xff1a; #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 引用&#xff1a;http://t.csdn.cn/pDcjL 1、FCN FCN: FCN是对图像进行像素级的分类&#xff08;也就是每个像素点都进行分类&#xff09;&#xff0c;从而解决了语义级别的图像分割…...

【Linux】基础IO流(上)

文章目录1. 预备知识2. 回忆C接口fopenfputsfprintfsnprintf追加方式—— a以读方式—— r3.操作系统如何进行读写文件操作open操作系统是如何让用户给自己传递标志位的理解标记位的问题新创建文件权限不正确解决 umask的权限write默认不会对原始文件清空系统层面追加系统层面 …...

【C++】类和对象三大特性--多态

文章目录1. 多态的基本概念2. 多态的定义及实现2.1多态的构成条件2.2 虚函数2.3虚函数的重写2.4 虚函数不能重写和检查是否重写 &#xff08;C11 &#xff09;2.5 重载、覆盖(重写)、隐藏(重定义)的对比3. 纯虚函数和抽象类3.1 概念3.2 接口继承和实现继承4.多态的实现原理4.1虚…...

【微前端】qiankun + vite + vue3

专栏&#xff1a; 【微前端】什么是微前端【微前端】qiankun【微前端】qiankun vite vue3 一、整体结构 在 qiankun 体系下&#xff0c;一个微前端工程包含一个主应用和多个子应用。本质上&#xff0c;每个工程&#xff08;主应用&#xff09;都可以单独开发、运行。 1.1…...

模型部署之TorchScript

一.关于torchscript和jit介绍 1.关于torchscript TorchScript是Pytorch模型&#xff08;继承自nn.Module&#xff09;的中间表示&#xff0c;保存后的torchscript模型可以在像C这种高性能的环境中运行 TorchScript是一种从PyTorch代码创建可序列化和可优化模型的方法。任何T…...

修改linux网卡配置文件的文件名

修改linux网卡配置文件的文件名 查看自己系统中网卡配置文件的文件名 #查看网卡的配置文件名&#xff0c;已经网络的状态 ip a查看系统是否可以使用ifconfig命令 #输入命令 ifconfig #出现以下图片表示ifconfig的命令可用。可能出现的错误&#xff1a;ifconfig command no foun…...

年轻人为啥热衷去寺庙?

年轻人的苦&#xff0c;寺庙最清楚。 周末的寺庙挤满了年轻人&#xff0c;北京雍和宫限流了&#xff0c;杭州灵隐寺十八籽的手串限购了&#xff0c;南京鸡鸣寺从地铁站出口就开始排队了...... “上班和上学&#xff0c;你选择哪个&#xff1f;” ”我选择上香“ 工作和学习…...

Java Spring 框架

当今世界&#xff0c;Java Spring 成为了最流行的 Java 开发框架之一。Spring 框架是一个轻量级的、高效的框架&#xff0c;它是 Java 应用程序开发的理想选择。在本文中&#xff0c;我们将深入探讨 Java Spring 框架的特性、优点以及如何使用它来构建高质量的应用程序。 1.Ja…...

基于OpenCV的人脸识别

目录 &#x1f969; 前言 &#x1f356; 环境使用 &#x1f356; 模块使用 &#x1f356; 模块介绍 &#x1f356; 模块安装问题: &#x1f969; OpenCV 简介 &#x1f356; 安装 OpenCV 模块 &#x1f969; OpenCV 基本使用 &#x1f356; 读取图片 &#x1f357; 【…...

一文带你看懂电压放大器和功率放大器的区别

很多人对于电压放大器和功率放大器总是分不太清&#xff0c;在实际应用过程中&#xff0c;电压放大器和功率放大器所起到的作用都是相同的。对于功率放大器和电压放大器的区别&#xff0c;今天就让安泰电子来带我们一起看看。功率放大器和电压放大器的主要区别是&#xff1a;功…...

C++虚函数与多态

C虚函数与多态虚函数抽象类纯虚函数虚析构函数多态虚函数的几个问题纯虚函数和ADT虚函数 virtual修饰的成员函数就是虚函数&#xff0c; 1.虚函数对类的内存影响&#xff1a;增加一个指针类型大小&#xff08;32位和64位&#xff09; 2.无论有多少个虚函数&#xff0c;只增加一…...

蓝桥杯Web前端练习-----渐变色背景生成器

介绍 相信做过前端开发的小伙伴们对渐变色在 UI 设计中的流行度一定不陌生&#xff0c;网页上也时常可以看到各类复杂的渐变色生成工具。使用原生的 CSS 变量加一些 JS 函数就能做出一个简单的渐变色背景生成器。 现在渐变色生成器只完成了颜色选取的功能&#xff0c;需要大家…...

Python中的微型巨人-Flask

文章目录前言主要内容优点及特性主要使用创建实例定义路由获取请求定制响应渲染Jinja2模板重定向和反向解析抛出HTTP异常总结更多宝藏前言 &#x1f60e;&#x1f973;&#x1f60e;&#x1f920;&#x1f62e;&#x1f916;&#x1f648;&#x1f4ad;&#x1f373;&#x1f…...

密码学中的承诺

Commitment 概述 密码学承诺是一个涉及两方的二阶段交互协议&#xff0c;双方分别为承诺方和接收方。简述来说&#xff0c;它的功能涵盖不可更改性和确定性。 承诺方发送的消息密文&#xff0c;一旦发出就意味着不会再更改&#xff0c;而接收方收到这个消息可以进行验证结果。…...

redis入门实战一、五种数据结构的基本操作(二)

redis入门实战一、五种数据结构的基本操作【二】 一、String1)、set2)、getset3)、msetnx 给多个元素赋值,原子操作4)、字符串 追加 & 取部分数据5)、数值可以做加减,指定增量大小6)、获取长度7)、 bitmap①、setbit②、bitop 二进制与或运算(效率高)③、bitcou…...

day13 模块和异常捕获总结

day13 模块和异常捕获 一、生成器 &#xff08;一&#xff09;、什么是生成器 1&#xff09;容器&#xff08;是一种可以创建多个数据的容器&#xff09;&#xff0c;生成器中保存的是创建数据的方法&#xff0c;而不是数据本身。2&#xff09;特点&#xff1a; a. 打印生成…...

【Linux】进程优先级 环境变量

进程优先级 环境变量 一、进程优先级1、基本概念2、查看以及修改系统进程的优先级3、一些其他的关于进程优先级的指令和函数调用4、与进程优先级有关的一些进程性质二、环境变量1、基本概念2、和环境变量相关的命令3、Linux中的常见环境变量介绍4、环境变量的组织方式以及在C代…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...