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 优化相关推荐

  1. ListView优化的代码

    第三种ListView优化:通过convertView+ViewHolder来实现,ViewHolder就是一个静态类,使用 ViewHolder 的关键好处是缓存了显示数据的视图(View),加快了 ...

  2. ListView优化机制及滑动时数据时出现的数据错乱重复问题

    ListView优化机制及滑动时数据时出现的数据错乱重复问题 转载于:https://www.cnblogs.com/zhujiabin/p/5596998.html

  3. 【提升栈】ListView优化

    前言 ListView优化一直是一个老生常谈的问题.无论是面试还是寻常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看怎样最大化的优化ListView的性能. 1.在adapter中 ...

  4. Android之ListView优化

    关于ListView几个方面的优化: ListView的大小设定固定值; 复用convertView, 使用ViewHolder提高在容器中查找组件的效率; 使用分页加载; 快速滚动时, item不显 ...

  5. 面试之 listview优化

    2019独角兽企业重金招聘Python工程师标准>>> 摘用别人的,谢谢作者 Adapter的作用是界面与数据之间的桥梁,通过设置适配器至ListView控件后(如调用ListVie ...

  6. Android listview优化以及listview混合itemview

    listView = (ListView) findViewById(R.id.listview); mAdapter = new VideoListAdapter(this); listView.s ...

  7. Android优化系列之ListView优化老生常谈

    本文内容:adapter,listview的优化,RecycleBi,google大会推荐优化, 实现ListView的过程,Adapter起到了至关重要的作用,不仅仅因为getview()方法.那么 ...

  8. ListView优化机制及滑动时数据时出现的数据错乱重复问题 图片、checkBox等

    该篇内容主要是记录我在实际开发中遇到的ListView滑动时数据错乱的几种情况,以及解决方法.在进行ListView滑动时数据错乱问题讨论之前会对ListView所谓的<优化>进行说明.文 ...

  9. Android ListView优化之局部刷新(更新)(非notifyDataSetChanged)

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53020164 [DylanAndroid的csdn博客] 在Android开发 ...

  10. Android开发实战《手机安全卫士》——8.“通信卫士”模块实现 JUnit测试 ListView优化

    文章目录 1.高级工具--去电归属地显示 2.通信卫士--黑名单布局编写 3.通信卫士--黑名单数据库 4.通信卫士--黑名单CRUD功能实现 5.通信卫士--JUnit测试 6.通信卫士--黑名单号 ...

最新文章

  1. 网络数据包信息收集工具ferret-sidejack
  2. Ubuntu系统配置JDK环境变量
  3. simlescalar CPU模拟器源代码分析
  4. 租赁笔记本电脑哪里有_广东哪里有离心鼓风机优势-长沙鼓风机厂
  5. git 学习1--查看全局配置
  6. linux物理网卡地址没有,Linux更改网卡物理地址
  7. PAP和CHAP认证
  8. 《卡巴斯基全系列》大客户key31个,有了它不用到处找卡巴斯基的KEY了!
  9. 进销存系统软件怎么测试,进销存系统中的报表测试
  10. 计算机vb代码电阻,利用VB程序编写色环电阻阻值计算器
  11. DNS协议及Bind应用
  12. 如何控制局域网网速_无线路由器如何限制局域网网速 无线路由器限制局域网网速方法【介绍】...
  13. \n和endl的区别
  14. pycharm喜马拉雅音乐抓取
  15. webpack 的安装与使用
  16. 探究斐波那契数列的通项公式
  17. windows系统下MySQL中遇到1045问题
  18. 几种常见的Shell:sh、bash、csh、tcsh、ash
  19. uil的简单常用操作
  20. 在凭证保存时 计算机程序能够对,湖北2015会计从业《会计电算化》全真预测卷三...

热门文章

  1. java/php/net/python房产信息管理系统设计
  2. ArcGIS 10.7安装包及手把手安装教程
  3. c语言答辩ppt案例,c语言ppt例子课题了答辩ppt成品中南民族大学.ppt
  4. Python实现PDF复制自动去除换行及空格
  5. mysql截取字符串去重_mysql 截取字符串 去重 拼接
  6. 计算机选题方向怎么写,计算机方面方向论文选题 计算机方面论文题目怎么定...
  7. Windows DLL 注入技术
  8. windows7环境下 硬盘安装ubuntu 12.04 server版
  9. 【MapGIS精品教程】005:MapGIS中间件的配置与使用
  10. 真的神了~无意中发现1500道的2021LeetCode算法刷题pdf笔记