Adaptert Listview 优化
这次是关于Listview的优化的,之前一直采用愚蠢的方式来使用listview,出现的情况就是数据多的话下拉的时候会出现卡顿的情况,内存占用多。所以学习了关于listview的优化,并且这也是普遍使用的方法。我们一般来说创建listview的话更常用的是继承BaseAdapter的方式进行实现,因为这样可以自定义list没一个item的布局,根据程序的需求进行定制,一般来说listview所展示的数据都是比较多的,一般也有比较少的。所以,不对adapter进行优化的话,那么每一次拖动listview都需要生成一次布局,这样的话,程序就可能会有卡顿的情况,并且这样的方式占用内存也比较多。主要是 getView(final int position, View convertView, ViewGroup parent){}的区别
下面这种方式不推荐使用:
public View getView(final int position, View convertView, ViewGroup parent) {
convertView= inflater.inflate(R.layout.activity_layout, null);
TextView testName = (TextView) convertView
.findViewById(R.id.testName_textview);
TextView CassetteType = (TextView) convertView
.findViewById(R.id.CassetteType_textview);
TextView testTimeYear_textview = (TextView) convertView
.findViewById(R.id.testTimeYear_textview);
testName.setText("Hello");
CassetteType.setText("Android");
testTimeYear_textview.setText("Word");
return view;
}
比较简单的例子,上面的方式不推荐使用,因为每一次加载item的时候都需要重新加载每一个控件,使得程序占用内存大,还可能会卡卡的感觉。
推荐下面的方式使用:
public View getView(final int position, View convertView,ViewGroup parent) {
ViewHolder viewHolder = null;
if (null == convertView) {
viewHolder = new ViewHolder();
LayoutInflater mInflater = LayoutInflater.from(mContext);
convertView = mInflater.inflate(R.layout.data_management, null);
viewHolder.CassetteType = (TextView) convertView
.findViewById(R.id.CassetteType_textview);
viewHolder.testTimeYear_textview = (TextView) convertView
.findViewById(R.id.testTimeYear_textview);
viewHolder.testTime = (TextView) convertView
.findViewById(R.id.testTime_textview);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
testName.setText("Hello");
CassetteType.setText("Android");
testTimeYear_textview.setText("Word");
return convertView;
}
private static class ViewHolder {
TextView CassetteType;
TextView testTimeYear_textview;
TextView testTime; }
这种方法的特点便是通过类ViewHolder,进行TextView的定义,Adapter每一次创建一个item的时候先判断convertView是否为空,为空的话就进行findViewById,其中最重要的是这个convertView.setTag(viewHolder);,convertView不为空的话就执行这句viewHolder = (ViewHolder) convertView.getTag();,然后每一个item就不需要重复性的去findViewById布局的每一个view了,这样就能优化listview的加载速度和减少内存使用,原理大概便是这样,可能也没有讲明,没能理解的话,建议搜搜listview优化。
Adaptert Listview 优化的更多相关文章
- listview优化 汇总
1,listview加载性能优化ViewHolder 转自: http://blog.csdn.net/jacman/article/details/7087995 在android开发中Listvi ...
- Android 常驻与很驻型广播的差别,及ListView优化,Android新手基本知识巩固
1.常驻型广播 常驻型广播,当你的应用程序关闭了,假设有广播信息来,你写的广播接收器相同的能接受到. 他的注冊方式就是在你的应用程序中的AndroidManifast.xml进行注冊. 通常说这样 ...
- 内存泄露--contentView缓存使用与ListView优化
引起Android内存泄露有很多种原因,下面罗列了一些问题,以后会一一解决 1.构造Adapter时没有使用缓存convertView(衍生出ListView优化问题) 2.查询数据库游标没有关闭 3 ...
- Android——ListView优化
1.ListView基本概念 列表显示需要三个元素: ListView:用来展示列表的View. 适配器:用来把数据映射到ListView上 数据:具体的将被映射的字符串,图片或基本组件 适配器类型分 ...
- Android零基础入门第43节:ListView优化和列表首尾使用
原文:Android零基础入门第43节:ListView优化和列表首尾使用 前面连续几期都在学习ListView的各种使用方法,如果细心的同学可能会发现其运行效率是有待提高的,那么本期就来一起学习有哪 ...
- Android开发之ListView详解 以及简单的listView优化
ListView列表视图 最常用的控件之一,使用场景例如:微信,手机QQ等等. android:divider:每个item之间的分割线,可以使用图片或者色值. android:dividerHeig ...
- listview优化技术
1.在adapter中的getView方法中尽量少使用逻辑 2.尽最大可能避免GC 3.滑动的时候不加载图片 4.将ListView的scrollingCache和animateCache设置为fal ...
- ListView优化中ViewHolder要不要定义为static静态内部类?
给学生讲课的时候,发现存在这个问题,下来百度了下,发现很纠结,涉及到了内部类对外部类的引用,静态类的生命周期等java知识,现总结如下: static class ViewHolder { //定义l ...
- Android性能优化--Listview优化
ListView的工作原理 首先来了解一下ListView的工作原理(可参见http://mobile.51cto.com/abased-410889.htm),如图: ListView 针对每个it ...
随机推荐
- List集合概述和特点
List集合概述 有序集合(也称序列)用户可以精确控制列表的每一个元素的位置插入,用户可以通过整数索引访问元素,并搜索列表中的元素 与set集合不同,列表通常允许重复的元素 List集合的特点 有序: ...
- tomcat源码分析01-启动过程概览
导读:tomcat是一个开源的web服务器,它实现了我们常用的Servlet,JSP,EL等相关规范,因为其性能稳定,开源等因素得到越来越多开发者的青睐,出于学习的目的,我决定研读其源码,并将阶段性成 ...
- 论文速递 | 实例分割算法BlendMask,实时又state-of-the-art
BlendMask通过更合理的blender模块融合top-level和low-level的语义信息来提取更准确的实例分割特征,该模型效果达到state-of-the-art,但结构十分精简,推理速度 ...
- poj1088 滑雪 dp+dfs记忆化
简单的搜索,不必多说了,初始状态下每个点能到达的长度是1,它本身.还有,注意关掉文件重定向,被坑好多次了. 代码如下: #include<cstdio> #include<algor ...
- shell脚本介绍以及常用命令
Shell脚本 Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的 ...
- Linux下段错误(C语言)
问题描述:在Linux下编程有时会出现段错误的提醒,出现这种错误有可能是因为以下几种原因 1.数组越界:如果在初始化或者接收输入时内容超过了定义好的数组元素个数时会出现段错误,Linux的数组越界检查 ...
- 安装arcgis server时提示“应用程序无法启动,因为应用程序......或使用命令行sxstrace.exe”
说一下这个原因:有几个条件不满足会产生这样的问题: 1.软件的发布是不需要安装的,直接在vs里编译好release版就发布了,而发布的时候如果缺少一些库文件,就会产生这样的问题. 一版都是目 ...
- 【翻译】.NET 5 Preview2发布
在4月2日,发布了.NET 5.0 Preview2,这次发布对一些功能和性能做了相关的改进,同时后面也会实施5.0版本更多的功能,其中一些功能目前也dotnet/designs在.NET 5 Pre ...
- Python第十一章-常用的核心模块01-collections模块
python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...
- BFS、DFS ——J - Nightmare
J - Nightmare Ignatius had a nightmare last night. He found himself in a labyrinth with a time bomb ...