在使用ListView控件的过程中,由于加载条目过多,在滑动时可能会造成卡顿,这是因为ListView在当前屏幕显示多少个条目,就会创建多少个对象,每一个条目都是一个对象。在滑动时,滑出屏幕的条目对象会被销毁,新加载到屏幕的条目会创建新的对象,因此在滑动时会不断地创建对象和销毁对象,并且每一个条目都需要加载一次布局,加载布局不仅对内存消耗比较大,而且浪费时间。如果条目包含图片,图片加载的时间比较长,就会造成内存溢出异常。

因此,我们在开发时需要对ListView进行优化,目的在于使滑动时不会重复创建对象,减少内存消耗和屏幕渲染处理。

(1)创建静态类

创建一个静态类,将需要加载的控件变量放在该类中,这样可以保证所有的控件只创建一次对象,不会重复创建对象。

static class ViewHolder{TextView tv_title;ImageView iv_img;Button btn_detail;
}

(2)服用缓存视图对象

在Adapter的getView(int position,View convertView,ViewGroup parent)方法中convertView代表的就是之前滑出屏幕的条目对象。如果滑动ListView,滑动出屏幕的View对象会以缓存的形式存在,而convertView就是缓存的View对象,可以复用缓存该对象减少新对象的创建。在加载布局文件时先判断convertView是否存在,不存在则说明没有缓存的View对象,则使用View.inflate()加载布局,进行布局的初始化,否则复用缓存的View对象。

if(convertView == null){convertView = View.inflate(context,R.layout.item,null);holder = new ViewHolder();holder.tv_title = findViewById(R.id.tv_title)...convertView.setTag(holder);
}
else{holder = convertView.getTag();
}

注意:getView()方法返回值为View,复用时需将返回值改为convertView

(3)使用RecycleView替换

RecycleView是ListView的提升,在内存优化等方面都有很大的优势,但是有些操作可能会比较复杂,如果实现中可以使用RecycleView的话,建议使用RecycleView代替ListView。

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. 京东金融晒 “打黑成绩单”:一年内避免用户损失上亿元
  2. Linux下DIY DLAN投屏方案
  3. 用BadgeView在actionbar menu上显示提醒信息
  4. ansible相关说明
  5. maskView与CAGradientLayer详解
  6. 全网最细之N种内部类详细讲解
  7. Windows 平台下基于MinGW和Qt 的OpenCV 之CMake 项目配置
  8. 为什么调用webservice接口只有 string arg0_快速开发平台中关于支持第三方接口开发的指导
  9. GoLang strings包函数用法
  10. nosql数据库之Redis集群
  11. 线性回归中常见的一些统计学术语(RSE RSS TSS ESS MSE RMSE R2 Pearson's r)
  12. 使用单片机的串口蓝牙通信写的接收SBUF里的数据,并进行发送执行命令,显示在数码管上,波特率9600
  13. 天翼云弹性计算服务器,获取天翼云Windows弹性云主机的密码操作步骤
  14. matlab commsrc.pn,poly2trellis
  15. 基于图像处理的路面裂缝检测系统设计与研究
  16. 作为程序员这些都是必读的书
  17. Latex 一半黑一半白的圆圈
  18. 10 个免费的网络监控工具
  19. CE认证EMC指令测试项及测试内容(智能开关)
  20. RocketMQ - nameSrv和Broker

热门文章

  1. IDE、SATA、SCSI、SAS、FC、SSD 硬盘类型
  2. FLTK学习笔记4-在FLTK中显示图片(上)
  3. 利用bat修复office文件图标
  4. 访问oracle数据库语句,Oracle数据库SQL ——Select 语句使用方法
  5. 在Octane中提升渲染速度的技巧(第1部分)
  6. iOS AVPlayer 使用总结
  7. python数字雨_用Python实现黑客帝国代码雨效果(3种方式)
  8. 更改网页alert弹出框样式
  9. Micro Sip 配置自己的freeswitch服务器地址
  10. Kaggle TMDB电影数据分析项目实战