这次是关于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 优化的更多相关文章

  1. listview优化 汇总

    1,listview加载性能优化ViewHolder 转自: http://blog.csdn.net/jacman/article/details/7087995 在android开发中Listvi ...

  2. Android 常驻与很驻型广播的差别,及ListView优化,Android新手基本知识巩固

    1.常驻型广播  常驻型广播,当你的应用程序关闭了,假设有广播信息来,你写的广播接收器相同的能接受到.  他的注冊方式就是在你的应用程序中的AndroidManifast.xml进行注冊. 通常说这样 ...

  3. 内存泄露--contentView缓存使用与ListView优化

    引起Android内存泄露有很多种原因,下面罗列了一些问题,以后会一一解决 1.构造Adapter时没有使用缓存convertView(衍生出ListView优化问题) 2.查询数据库游标没有关闭 3 ...

  4. Android——ListView优化

    1.ListView基本概念 列表显示需要三个元素: ListView:用来展示列表的View. 适配器:用来把数据映射到ListView上 数据:具体的将被映射的字符串,图片或基本组件 适配器类型分 ...

  5. Android零基础入门第43节:ListView优化和列表首尾使用

    原文:Android零基础入门第43节:ListView优化和列表首尾使用 前面连续几期都在学习ListView的各种使用方法,如果细心的同学可能会发现其运行效率是有待提高的,那么本期就来一起学习有哪 ...

  6. Android开发之ListView详解 以及简单的listView优化

    ListView列表视图 最常用的控件之一,使用场景例如:微信,手机QQ等等. android:divider:每个item之间的分割线,可以使用图片或者色值. android:dividerHeig ...

  7. listview优化技术

    1.在adapter中的getView方法中尽量少使用逻辑 2.尽最大可能避免GC 3.滑动的时候不加载图片 4.将ListView的scrollingCache和animateCache设置为fal ...

  8. ListView优化中ViewHolder要不要定义为static静态内部类?

    给学生讲课的时候,发现存在这个问题,下来百度了下,发现很纠结,涉及到了内部类对外部类的引用,静态类的生命周期等java知识,现总结如下: static class ViewHolder { //定义l ...

  9. Android性能优化--Listview优化

    ListView的工作原理 首先来了解一下ListView的工作原理(可参见http://mobile.51cto.com/abased-410889.htm),如图: ListView 针对每个it ...

随机推荐

  1. 【简介】OpenOCD 由jtag操作到parport driver流程

    1. 定义 jtag_command_type 在 OpenOCD 中,JTag 命令在枚举 jtag_command_type 中定义,定义如下: /** * The type of the @c ...

  2. 数据库-Mysql语句

    Mysql语句 不定时更新 1.数据库相关的语句 /* 数据库操作 */ ------------------ -- 启动MySQL net start mysql -- 接与断开服务器 mysql ...

  3. xmake v2.3.2 发布, 带来和ninja一样快的构建速度

    这个版本重点重构优化了下内部并行构建机制,实现多个target间源文件的并行编译,以及并行link的支持,同时优化了xmake的一些内部损耗,修复影响编译速度的一些bug. 通过测试对比,目前的整体构 ...

  4. java-TreeMap

    2019-12-17 10:34:55 //返回小于key的第一个键: K lowerKey(K key); //返回大于key的第一个键: K higherKey(K key); //返回小于等于k ...

  5. python爬取中国大学排名

    教程来自:[Python网络爬虫与信息提取].MOOC. 北京理工大学 目标:爬取最好大学网前50名大学 代码如下: import requests from bs4 import Beautiful ...

  6. 使用scikit-learn解决文本多分类问题(附python演练)

    来源 | TowardsDataScience 译者 | Revolver 在我们的商业世界中,存在着许多需要对文本进行分类的情况.例如,新闻报道通常按主题进行组织; 内容或产品通常需要按类别打上标签 ...

  7. Unable to locate JAR/zip in file system as specified by the driver definitio

    把之前的驱动包删掉,然后把你的驱动包导入就行了 现在OK键就算正常了

  8. vue 听说你很会传值?

    前置 大小 vue 项目都离不开组件通讯, 在这里总结一下vue组件通讯方式并列出, 都是简单的例子. 适合像我这样的小白.如有错误,欢迎指正. 温馨提示: 下文没有列出 vuex, vuex 也是重 ...

  9. Mac OS安装Go语言及配置VSCode开发环境:一个工具(gopls)解千愁

    前言 截止到目前为止,Go语言已经更新到1.14.1,网上的很多教程均已经过时,我在此汇总并整理一下相关的教程,提供一个适合当下的Mac OS教程. 教程中使用了Go在1.11之后推出的依赖包管理工具 ...

  10. NodeMCU入坑指南-低成本打造零舍友闻风丧胆WiFi断网神器

    前言 最近对IoT方面比较感兴趣,所以在某宝上入手了一块NodeMCU的开发板,至于为什么我选择这块开发板呢?嘿嘿,当然是因为便宜啊