ListView 优化
ListView 优化
Listview 优化一
viewHolder 的使用和convertView的复用
viewHolder相当于一个水果篮子,我们把要吃的水果,洗好先放到篮子了,我们要吃的时候直接吃就行了,不需要再一个一个拿去洗了,方便,省力。
首先讲下ListView的原理:ListView中的每一个Item显示都需要Adapter调用一次getView()的方法,这个方法会传入一个convertView的参数,这个方法返回的View就是这个Item显示的View。如果当Item的数量足够大,再为每一个Item都创建一个View对象,必将占用很多内存空间,即创建View对象(mInflater.inflate(R.layout.lv_item, null);从xml中生成View,这是属于IO操作)是耗时操作,所以必将影响性能。Android提供了一个叫做Recycler(反复循环)的构件,就是当ListView的Item从滚出屏幕视角之外,对应Item的View会被缓存到Recycler中,相应的会从生成一个Item,而此时调用的getView中的convertView参数就是滚出屏幕的缓存Item的View,所以说如果能重用这个convertView,就会大大改善性能。
@Overridepublic View getView ( int position, View convertView, ViewGroup viewGroup){convertView//这里是复用的viewMyViewHolder holder;if (convertView == null) {holder = new MyViewHolder();convertView = LayoutInflate.from(MainActivity.this).inflate(R.layout.list_item, null, true);holder.textView = (TextView) convertView.findViewById(R.id.text);convertView.setTag(holder);} else {holder = (MyViewHolder) convertView.getTag();}holder.textView.setText(“hello”);return convertView;}class MyViewHolder {TextView textView;//这里是把水果放到篮子里的操作}
}
简单列表的复用
其中getView是渲染每个Item时进行回调生成View的,方法参数convertView就是ListView传回可以复用的View,当其不为null时,无需重新创建View,可以直接使用convertView,进行数据渲染即可。其原理是当第一次调用时ListView直接将生成的View缓存到一个ArrayList中,当需要时直接从ArrayList中取出即可:
复杂列表复用
当列表中的item需要不同Item的时候
@Override//返回view类型数量public int getViewTypeCount() {return super.getViewTypeCount();}@Override//返回每个Item的类型public int getItemViewType(int position) {return super.getItemViewType(position);}
ListView 优化相关推荐
- ListView优化的代码
第三种ListView优化:通过convertView+ViewHolder来实现,ViewHolder就是一个静态类,使用 ViewHolder 的关键好处是缓存了显示数据的视图(View),加快了 ...
- ListView优化机制及滑动时数据时出现的数据错乱重复问题
ListView优化机制及滑动时数据时出现的数据错乱重复问题 转载于:https://www.cnblogs.com/zhujiabin/p/5596998.html
- 【提升栈】ListView优化
前言 ListView优化一直是一个老生常谈的问题.无论是面试还是寻常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看怎样最大化的优化ListView的性能. 1.在adapter中 ...
- Android之ListView优化
关于ListView几个方面的优化: ListView的大小设定固定值; 复用convertView, 使用ViewHolder提高在容器中查找组件的效率; 使用分页加载; 快速滚动时, item不显 ...
- 面试之 listview优化
2019独角兽企业重金招聘Python工程师标准>>> 摘用别人的,谢谢作者 Adapter的作用是界面与数据之间的桥梁,通过设置适配器至ListView控件后(如调用ListVie ...
- Android listview优化以及listview混合itemview
listView = (ListView) findViewById(R.id.listview); mAdapter = new VideoListAdapter(this); listView.s ...
- Android优化系列之ListView优化老生常谈
本文内容:adapter,listview的优化,RecycleBi,google大会推荐优化, 实现ListView的过程,Adapter起到了至关重要的作用,不仅仅因为getview()方法.那么 ...
- ListView优化机制及滑动时数据时出现的数据错乱重复问题 图片、checkBox等
该篇内容主要是记录我在实际开发中遇到的ListView滑动时数据错乱的几种情况,以及解决方法.在进行ListView滑动时数据错乱问题讨论之前会对ListView所谓的<优化>进行说明.文 ...
- Android ListView优化之局部刷新(更新)(非notifyDataSetChanged)
转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53020164 [DylanAndroid的csdn博客] 在Android开发 ...
- Android开发实战《手机安全卫士》——8.“通信卫士”模块实现 JUnit测试 ListView优化
文章目录 1.高级工具--去电归属地显示 2.通信卫士--黑名单布局编写 3.通信卫士--黑名单数据库 4.通信卫士--黑名单CRUD功能实现 5.通信卫士--JUnit测试 6.通信卫士--黑名单号 ...
最新文章
- 网络数据包信息收集工具ferret-sidejack
- Ubuntu系统配置JDK环境变量
- simlescalar CPU模拟器源代码分析
- 租赁笔记本电脑哪里有_广东哪里有离心鼓风机优势-长沙鼓风机厂
- git 学习1--查看全局配置
- linux物理网卡地址没有,Linux更改网卡物理地址
- PAP和CHAP认证
- 《卡巴斯基全系列》大客户key31个,有了它不用到处找卡巴斯基的KEY了!
- 进销存系统软件怎么测试,进销存系统中的报表测试
- 计算机vb代码电阻,利用VB程序编写色环电阻阻值计算器
- DNS协议及Bind应用
- 如何控制局域网网速_无线路由器如何限制局域网网速 无线路由器限制局域网网速方法【介绍】...
- \n和endl的区别
- pycharm喜马拉雅音乐抓取
- webpack 的安装与使用
- 探究斐波那契数列的通项公式
- windows系统下MySQL中遇到1045问题
- 几种常见的Shell:sh、bash、csh、tcsh、ash
- uil的简单常用操作
- 在凭证保存时 计算机程序能够对,湖北2015会计从业《会计电算化》全真预测卷三...
热门文章
- java/php/net/python房产信息管理系统设计
- ArcGIS 10.7安装包及手把手安装教程
- c语言答辩ppt案例,c语言ppt例子课题了答辩ppt成品中南民族大学.ppt
- Python实现PDF复制自动去除换行及空格
- mysql截取字符串去重_mysql 截取字符串 去重 拼接
- 计算机选题方向怎么写,计算机方面方向论文选题 计算机方面论文题目怎么定...
- Windows DLL 注入技术
- windows7环境下 硬盘安装ubuntu 12.04 server版
- 【MapGIS精品教程】005:MapGIS中间件的配置与使用
- 真的神了~无意中发现1500道的2021LeetCode算法刷题pdf笔记