GridView重复调用getView有关问题

简介:
使用GridView控件,却发现getView被重复调用,次数多达上百次,拖垮了系统,影响用户体验!

	public View getView(int position, View convertView, ViewGroup parent) 
	{

		Log.v(Tag, "<getView> position = " + position);
		
		...
		return convertView;
	}

log信息:
10-12 10:43:09.880: V/GridViewAdapter(30785): <getView> position = 0
10-12 10:43:09.890: V/GridViewAdapter(30785): <getView> position = 0
10-12 10:43:09.890: V/GridViewAdapter(30785): <getView> position = 0
10-12 10:43:09.900: V/GridViewAdapter(30785): <getView> position = 0
10-12 10:43:09.910: V/GridViewAdapter(30785): <getView> position = 0


其中只有以下五条信息是正常的,其它都是多余。

10-12 10:43:10.160: V/GridViewAdapter(30785): <getView> position = 0
10-12 10:43:10.160: V/GridViewAdapter(30785): <getView> position = 1
10-12 10:43:10.170: V/GridViewAdapter(30785): <getView> position = 2
10-12 10:43:10.200: V/GridViewAdapter(30785): <getView> position = 3
10-12 10:43:10.220: V/GridViewAdapter(30785): <getView> position = 4

参考了网上很多的修改的方法,比如布局中高度属性wrap_content设为固定值或者fill_parent等,但都未起作用。也许遇到问题太特殊,只能自己想办法了!      

虽然没有办法阻止系统重复调用getView,但是我们有办法让多余的getView什么都不做。如此这般就可以减轻系统负担,增加用户体验。  

增加一个变量mCount来记录position = 0的次数,依据mCount的值来决定执行流程。

	public View getView(int position, View convertView, ViewGroup parent) 
	{

		Log.v(Tag, "<getView> position = " + position + " mCount = " + mCount);
		

		if (position == 0)
		{
			mCount++;
		}
		else
		{
			mCount = 0;
		}
		
		if (mCount > 1)
		{
			Log.v(Tag, "<getView> drop !!!");
			return convertView;
		}

		...
		return convertView;
	}


log信息

10-12 12:57:32.436: V/GridViewAdapter(32222): <getView> position = 0 mCount = 0
10-12 12:57:32.436: V/GridViewAdapter(32222): <getView> position = 0 mCount = 1
10-12 12:57:32.436: V/GridViewAdapter(32222): <getView> drop !!!
10-12 12:57:32.446: V/GridViewAdapter(32222): <getView> position = 0 mCount = 2
10-12 12:57:32.456: V/GridViewAdapter(32222): <getView> drop !!!
10-12 12:57:32.456: V/GridViewAdapter(32222): <getView> position = 0 mCount = 3
10-12 12:57:32.456: V/GridViewAdapter(32222): <getView> drop !!!
10-12 12:57:32.466: V/GridViewAdapter(32222): <getView> position = 0 mCount = 4
10-12 12:57:32.466: V/GridViewAdapter(32222): <getView> drop !!!
相关文章
|
机器学习/深度学习 算法
CodeFormer
【6月更文挑战第13天】
424 3
|
网络协议 网络架构
内网IP 外网IP 网卡 路由器通信过程(全)
       这几天上了计算机网络的课,对于老师讲的内容也是懵懵懂懂,一个慌神就没跟上,啥ip 啥NAT一脸蒙蔽。课后oogle补了点东西算是大致有了点了解,不过网上的总结都是零零散散而且点到即止。
5285 0
|
传感器 并行计算 算法
多传感器感知原理解读 | BEVFusion解读(一)
多传感器感知原理解读 | BEVFusion解读(一)
932 0
|
12月前
|
存储 监控 固态存储
在高并发环境下,如何优化 WAL 的写入性能?
在高并发环境下,如何优化 WAL 的写入性能?
176 2
|
存储 Cloud Native 安全
阿里云目前优惠券最新种类、金额及使用区别参考
目前阿里云为用户推出了无门槛优惠券,上云抵扣金、算力补贴优惠券、上云礼包等不同种类的优惠券,助力更多用户优惠上云,但是这些优惠券在领取和使用规则上是不同的,本文为大家介绍目前阿里云的各种优惠券领取和使用注意事项,以供大家了解自己能领取或者申请哪些优惠券,在使用过程中需要注意什么。
阿里云目前优惠券最新种类、金额及使用区别参考
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
634 0
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
Java 编译器 数据安全/隐私保护
Java 重写(Override)与重载(Overload)详解
在 Java 中,重写(Override)和重载(Overload)是两个容易混淆但功能和实现方式明显不同的重要概念。重写是在子类中重新定义父类已有的方法,实现多态;重载是在同一类中定义多个同名但参数不同的方法,提供多种调用方式。重写要求方法签名相同且返回类型一致或为父类子类关系,而重载则关注方法参数的差异。理解两者的区别有助于更好地设计类和方法。
1017 3
|
Cloud Native 安全 物联网
【阿里云云原生专栏】云边端一体化:阿里云如何利用云原生技术赋能物联网
【5月更文挑战第22天】阿里云借助云原生技术赋能物联网,实现云边端一体化,提升系统弹性与敏捷性。通过容器化部署,保证高可用性与可靠性。在智能交通等领域,阿里云提供高效解决方案,实现实时数据分析与决策。代码示例展示如何使用阿里云服务处理物联网数据。同时,阿里云重视数据安全,采用加密和访问控制保障数据隐私。丰富的工具和服务支持开发者构建物联网应用,推动技术广泛应用与发展。
580 1
|
前端开发 安全 JavaScript
如何区分是前端BUG还是后端BUG
1 基于经验 前端BUG特点: (1)界面排版、布局错误、兼容性问题 (2)网络不稳定导致JS或CSS未完全加载或请求超时(一般不需要提BUG),正常网络下加载超时 后端BUG特点: 业务逻辑、性能问题、数据问题、安全性问题 2 通过HTTP请求和响应信息 可以通过浏览器开发者工具(F12)、postman、fiddler(移动端可通过该工具抓包)、Charles、Proxyman、Wireshark、HttpCanary、tcpdump等工具。
308 1
|
XML Java Android开发
Android Studio App开发之列表类视图中基本适配器BaseAdapter的使用及实战(附源码 超详细)
Android Studio App开发之列表类视图中基本适配器BaseAdapter的使用及实战(附源码 超详细)
388 0