ListView控件复用带来的问题及解决方法

商城购物车加减控件的简单封装(续),解决ListView中数据错乱的问题 在上一篇文章中,我们学习了商城购物车加减控件的简单封装,知道了封装的思路过程和使用方法。还没有看过上一篇文章的朋友,建议先去阅读 商城购物车加减控件的简单封装 。这段时间收到一些小伙伴的反馈,在ListView或者是RecyclerView中存在item复用导致数据错乱的问题,这篇文章就重点解决item复用导致数据错乱的问题和在ListView或者RecyclerView中的用法。下面为了方便我们 阅读详情

在使用ListView当条目非常多时,Android会对每一个条目上的控件逐个进行渲染,造成性能低下,于是用ListView时经常采用控件复用,也就是说如果此条目使用到的控件之前创建过,那么就直接使用之前创建的控件,不必每次在创建新控件,如下:

@Override
	public View getView(int position, View convertView, ViewGroup parent)
	{
		ViewHolder viewHolder = null;

		if (null == convertView)
		{
			viewHolder = new ViewHolder();
			convertView = inflater.inflate(R.layout.manage_item, null);

			viewHolder.forwordImageView = (ImageView) convertView
					.findViewById(R.id.main_listviewimage);
			viewHolder.mainListItems = (TextView) convertView
					.findViewById(R.id.main_listviewtext);
			viewHolder.tagView = (TextView) convertView.findViewById(R.id.tag);
			convertView.setTag(viewHolder);
		}
		else
		{
			viewHolder = (ViewHolder) convertView.getTag();
		}

		viewHolder.forwordImageView.setImageResource(R.drawable.function_img);
		viewHolder.mainListItems.setText(list.get(position).toString());

		return convertView;
	}

但假如想要在制定位置条目的TextView上设置相应的文本,其他条目上并不设置,这时就会出现一个问题就是一些没有指定的TextView上也会被设置上相应的文本,这是由于当程序判断convertView不为空时,程序就会使用之前创建过的控件,但之前创建过的控件上已设置过文本,所以就导致新的条目上也设置上了文本。解决办法是在不希望设置文本的位置也做一下判断,把对应的TextView设置成空串即可,代码如下:

@Override
	public View getView(int position, View convertView, ViewGroup parent)
	{
		ViewHolder viewHolder = null;

		if (null == convertView)
		{
			viewHolder = new ViewHolder();
			convertView = inflater.inflate(R.layout.manage_item, null);

			viewHolder.forwordImageView = (ImageView) convertView
					.findViewById(R.id.main_listviewimage);
			viewHolder.mainListItems = (TextView) convertView
					.findViewById(R.id.main_listviewtext);
			viewHolder.tagView = (TextView) convertView.findViewById(R.id.tag);
			convertView.setTag(viewHolder);
		}
		else
		{
			viewHolder = (ViewHolder) convertView.getTag();
		}

		viewHolder.forwordImageView.setImageResource(R.drawable.function_img);
		viewHolder.mainListItems.setText(list.get(position).toString());
		if (0 == position)
		{
			viewHolder.tagView.setText("");
		}
		else if (1 == position)
		{
			viewHolder.tagView.setText(new ApplicationData(context)
					.getMediaPath());
		}
		return convertView;
	}

这样就可以解决控件复用出现的这种问题,对于其他控件的解决方法也是类似。
ListView套用EditText完美解决方案 EditText是安卓的标准输入控件,也是最长用的控件,被认为是很简单的,但是当这个最简单、易用的控件碰上ListView列表控件的时候,坑爹的情况就出现了,焦点获取问题,输入的内容混乱问题、无法正常输入问题等等,总之就是简单的控件让开发变得头疼不已。究其原因,ListView的自条目会复用控件,导致edittext数据混乱,焦点的获取出现问题。遇到过问题的,都明白是怎么回事,这里不再截图展示问题 阅读详情

相关推荐

listview复用原理

1.ListView的复用机制 2.ViewHolder的概念   1.ListView的复用机制   ListView是我们经常使用的一个控件,虽然说都会用,但是却并不一定完全清楚ListView的复用机制,虽然在Android 5.0版本之后提供了RecycleView去替代ListView和GridView,提供了一种插拔式的体验,也就是所谓的模块化。本篇主要针对

qq_27688259的博客 914

Android 解决ListView的复用问题

ListView是大家在项目的开发过程中不可避免要使用到的,使用ListView的同时我们还要使用到适配器,如果ListView只有一两条数据的话我们可能不会考虑到用ListView的复用机制,因为你用不用对象的创建和空间的开辟都是那么多。这样的话ListView复用出现的问题也就不存在了。然而很多应用展示的条目并不是那一两条数据,而是很多会多余一屏的显示,不然也就不会有加载更多的出现了。如果我们不

刘永祥的专栏 1万+

Android ListView滑动过程中控件显示重复/错误问题之原理分析及解决方案

分析并解决①控件数据未初始化而导致的显示错误②网络异步加载导致出现显示错误、重复。

刘明嘉的专栏 2265

解决安卓listview视图重用、复用问题。

ListView视图复用功能: 当listview的内容超过显示的大小,滑动列表时,item的视图不变只是改变其中存放的子view,并且不同子view只创建一次,这样就不会每次都加载新的视图,优化性能。 而这样就会出现一个问题,如果我们想监听每一个子view,当子view不在item的显示范围内时,监听就会失败。如果监听item的视图又会导致监听的视图位置中的子view会随滑动而改变。 解决办法就是把listview的大小直接定为显示所有内容需要的大小。这样listview就会一次性加载所有的内容。 但是不

qq_45097213的博客 866

android listview控件复用问题解决

andorid listview由于复用控件的问题,再布局上使用checkbox时会造成选中状态错乱的问题,该项目可以解决该问题

android listView复用导致item上面动画的错乱

android listView复用导致item上面动画的错乱。网上大部分都是写的item上面显示静态图片的例子,我这个是解决显示动态图片时复用导致的动画显示错乱问题。问题描述:假如一屏可以显示10个item项,如果第一个正在播放动画,此时往下滚动,当第一个item不可见时会发现下面新出来的item上面的动画会动。该资源就是解决这个问题。看到的网友有福了,附件解压后即可载入studio运行。本人亲测可用!

android app -- 关于listview的不复用,解决item状态改变的问题

我们在平常的开发中使用listView基本上都是复用使用,但是也有一些特殊情况时不能在使用复用例如listView中的每一项都能操作(比如有个editText输入内容,上下滑动之后,看输入框里面的内容是不是要被改变,或者在下面复用的时候出现了这个输入框里面的内容。比如,一个单选框,这一项选中之后,上下滑动之后,看这个选中状态是不是乱跑了,之前的选中状态是不是消失了。还有每个item都有一个加载动画...

sp_wei的博客 1600

Coding Plan:程序员真实工作的可执行编码决策框架

Coding Plan 是一种面向工程实践的编码决策方法论,它超越传统学习路径,聚焦于代码在真实业务系统中的上下文对齐、影响控制与可演进性保障。其核心在于将模糊的开发直觉转化为可度量、可验证、可协作的日常动作,涵盖目标对齐、上下文锁定、验证闭环、协作契约和演进预留五大锚点。结合2026年AI辅助编码新范式,它强调将大模型作为‘上下文翻译器’而非代码生成器,并通过分钟级工作块、技术债主动发行、可观测性前置等机制,显著提升交付确定性与系统长期健康度。本文详解该框架的底层逻辑与落地实践。

weixin_33326218的博客 439

Android ListView中item view重复使用带来的问题

Android ListView中item view重复使用带来的问题 本文主要介绍ListView中item view的重复使用、可能带来的出错情况以及解决方案。 1、为什么item View重复使用及如何重复使用 熟悉ListView的朋友都知道,在ListView的每个item需要花较大的时间进行渲染(比如需要网络获取数据、图片)时,为了使得L...

huobengluantiao8 311

CentOS 7 安装 Python 3.10

我这里已经软链接了,正常未链接之前是python->python2.7而不是python3.10。python2.7默认安装是在 /usr/bin目录中,切换到/usr/bin/更改yum配置,因为其要用到python2才能执行,否则会导致yum不能正常使用。2. 安装 Python 3.10 必需的 openssl >= 1.1.1。默认的centos7是没有安装pip,先添加epel扩展源。/usr/bin/python 修改为如下。添加软链接,将原来的链接备份。添加python3的软链接。

bensonyang888的博客 2905

SAP ABAP ALV表格实战:5分钟搞定单元格下拉框配置(附完整代码)

本文详细介绍了在SAP ABAP开发中如何快速配置ALV表格的单元格下拉框功能,通过5分钟实战教程帮助开发者掌握关键步骤。文章包含完整的ABAP代码示例,涵盖下拉值定义、字段目录配置及ALV控件绑定等核心操作,特别适合需要实现财务系统费用类型选择或采购系统物料分类等场景的开发者参考。

weixin_28331555的博客 111

listview多个子样式的回收复用问题

如图所示: listview的滑动,都会带出新的new_item出现,old_item移出屏幕的时候会被回收,new_item其实就是old_item,这个item就是getview的convertview参数, 现在假设这样一种情况,一共有4种布局,最开始的三项都是不同的样式,如下图所示: 就前三项占据了一屏幕了,后面都是一样的第四类布局,这样如果使用回收机制的话,

u012345683的博客 987

DIY便携式PEMF磁脉冲治疗仪:百元成本自制生物物理疗法设备

脉冲电磁场(PEMF)疗法是一种基于生物物理原理的非侵入性技术,它通过特定频率的电磁脉冲作用于细胞层面,影响细胞膜电位和离子通道活动,从而可能调节细胞代谢与功能。其技术价值在于提供了一种物理干预手段,在健康科技和生物黑客领域被探索用于放松、恢复等场景。实现PEMF的核心是通过信号发生与功率放大驱动电磁线圈产生可控磁场。本文以蓝牙音频模块和智能手机App为切入点,详细解析了如何利用低成本电子元件(如DFRobot XY-WRBT模块和漆包线线圈)构建一个可自定义频率的便携式PEMF设备,涵盖了从电路设计、线圈

weixin_31476015的博客 352

解决ListView中滑动复用时控件的混乱问题

这个问题恐怕很多人在刚开始使用ListView时都接触到过,就是比如listview的item中有一个Button或一个CheckBox,你明明点击按键改变了他的背景图片或者问题,又或者勾选了CheckBox,但是你一滑动,发现下面你没操作的item也跟着改变了,然后你再滑动回去,结果原来item上面的操作又变没了。这就是listview中item复用时所产生的问题,下面这种图就是例子。 上图就是例

verzqli的博客 8230

网络虚拟化介绍(OVS、DVS)

网络虚拟化概念网络虚拟化就是把网络层的一些功能从硬件中剥离出来,建立新的网络虚拟层;该虚拟层可以接管网络服务和配置,实现网络服务与物理层的解耦,打破物理资源限制;通过网络虚拟层能够在一个物理网络上模拟出多个逻辑网络,并且多用户在逻辑网络上相互隔离,保证网络安全网络虚拟化的特点隔离性:不同租户的流量相互之间不能互访;但是IP/MAC地址都可以独立规划可移动性:虚拟机可以跨二层/三层迁移,甚至可以跨广域网迁移(迁移前后虚拟机Vlan和IP地址都不会发生变化)可扩展性:逻辑网络的规模和数量可扩展。

m0_49864110的博客 1万+

统计信号处理基础 习题解答1-1

1-1:在雷达习题中,双程延时时间的估计量具有PDF τ0~Nτ0,στ02,其中τ0是真值。假如要估计距离请提出一种估计量R,并求它的PDF。然后,确定标准偏差στ0,使得距离估计值的99%在真值的100m以内,对电磁波传播速度取c=3×108m/s。 解答: 问题1: 由于电磁波传播速度c,信号可观察的双程传播延时τ0和双程传播距离τ0满足关系: R=cτ02 因此可采用如下估计量: R=cτ02 问题2: 由于τ0满足正态分布,且: Eτ0=τ0 varτ0=στ02 那么: E

weixin_43270276的博客 2806

ListView中怎么解决CheckBox复用的问题

已经选中的CheckBox在滑动消失之后,会导致最新出现的Item由于复用的问题,与消失的Item中CheckBox选中状态一致,也变为选中状态(实际未选中)。

hanweimeng的博客 3564

433MHz无线通信避坑指南:如何解决信号干扰和误码问题

本文深入探讨433MHz无线通信中的信号干扰和误码问题,提供从射频前端设计到协议优化的全链路解决方案。通过天线匹配、电源噪声抑制、曼彻斯特编码改进及实时频点切换等技术,显著提升通信稳定性和距离。适合智能家居和工业无线控制系统的开发者参考。

weixin_29288313的博客 417

Android 中listView的多个Item复用问题

最近接触到了listView中多个Item复用的问题。listView使我们Android开发中非常常见的一个控件,可以说任何一款应用都会使用到他,所有呢,这个控件也被别人研究的比较多。常用的一般复用方法,大家应该都清楚。convertView的复用,使用ViewHolder,使用LruCache,异步加载等等。这里就是记录我开发当中遇到的listView的多个item复用的方法和一些处理的坑。。

做一个苦行僧的专栏 3997

如何使用Agent框架来模拟群体智能?

Agent 框架作为人工智能领域的重要工具,可以模拟复杂的群体智能行为,广泛应用于社会科学、经济学和行为学等领域。

335

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android完美解决ListView复用导致的Checkbox状态混乱问题

在Android开发中,ListView、RecyclerView和GridView控件是实现列表布局的不可或缺的工具,我觉得暂且可以这么说。比如QQ好友列表等,我们不可能用循环的方式去实现,这样对应用的性能也是有很大影响的。所以,为了记录之前遇到的这个问题,也顺便给其他需要解决这个问题的童鞋看一下。

骑蜗牛去看大海 11万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

解决ListView复用的乱码问题

废话不多说,先说问题:就是我们在使用ListView的时候一般都ViewHolder进行复用。 但是当我们对于item里面的某个控件进行判断来是否显示或者隐藏的时候,就会出现乱码的问题。 具体的原理就是不说了没什么用。 解决方法就是 比如我们channalInfo.getType()==0的时候设置iv_ch_yinys和iv_ch_suo设置为隐藏。就必须在channalInfo.getType(

Code_legend的博客 1808

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Xamarin.Android ListView复用问题的解决办法

1、相信刚开始使用ListView都接触到过,就是比如ListView的item有一个Button或一个CheckBox,你明明点击按键改变了他的背景图片或者颜色,又或者勾选了CheckBox,但是你一滑动,发现下面你没操作的item也跟着改变了,然后你再滑动回去,结果原来item上面的操作又变没了,这就是ListView中item复用时产生的问题。 2、我的解决办法是直接继承使用系统的ListActivity类,说明下,继承自ListActivity类将自动创建一个ListView,并公开一个ListAd

tanyi2002的博客 337

listView界面改变后滑动时的复用问题

listView中Item有事件处理并且改变了子布局中某控件的呈现时,由于getView()返回View的复用性,导致滑动的时候出现复用的样式,具体问题如下:内部监听问题可参照:http://blog.youkuaiyun.com/tom_xiaoxie/article/details/50827185 解决办法:重写listView的onMeasure()方法:  public cl

Tom_xiaoxie的博客 1228

RecyclerView,ListView,ViewPager 等各种控件复用问题解决方案

我的个人网站 - 有事没事可以去看看哇~~~~最近一直在搞事情,,都没有更新博客,,,今天遇到一个BUG ,RecyclerView的复用问题,这个问题很蛋疼。 遇到之后就一直巴拉巴拉,想看看广大IT宅男有没有遇到相同问题,,然而并没有什么卵用总结一下他们的方案,,,,最后说一下我的方案 1 . 创建观察者,监听状态,,取消该状态来实现不复用 2 . 设置Tag ,根据Tag来判

Oblivion的博客 1576
上一篇: Ubuntu修改系统运行级别
下一篇: TCP/IP,http,socket,长连接,短连接
IDTC
博客等级 码龄15年 22粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值