ListView的Adapter的作用如下图所示:

 

  Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。想过没有? 在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源?

  先看看下面的代码:

  public View getView(int position, View convertView, ViewGroup parent) {     View item = mInflater.inflate(R.layout.list_item_icon_text, null);     ((TextView) item.findViewById(R.id.text)).setText(DATA[position]);     ((ImageView) item.findViewById(R.id.icon)).setImageBitmap(     (position & 1) == 1 ? mIcon1 : mIcon2);     return item;   }

  我们再来看看下面的代码:

  public View getView(int position, View convertView, ViewGroup parent) {     if (convertView == null) {     convertView = mInflater.inflate(R.layout.item, null);   }     ((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]);     ((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap(     (position & 1) == 1 ? mIcon1 : mIcon2);     return convertView;   }

  上面的代码好了很多,系统将会减少创建很多View。性能得到了很大的提升。

  下面是更优化的代码:

  public View getView(int position, View convertView, ViewGroup parent) {   ViewHolder holder;   if (convertView == null) {   convertView = mInflater.inflate(R.layout.list_item_icon_text, null);   holder = new ViewHolder();   holder.text = (TextView) convertView.findViewById(R.id.text);   holder.icon = (ImageView) convertView.findViewById(R.id.icon);   convertView.setTag(holder);   } else {   holder = (ViewHolder) convertView.getTag();   }   holder.text.setText(DATA[position]);   holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);   return convertView;   }      static class ViewHolder {   TextView text;   ImageView icon;   }

  三种方法的对比图:哪个最提升性能一眼就看出来了

原文地址:http://android.tgbus.com/Android/tutorial/201109/369818.shtml

[Rosa]Android ListView 适配器原理及优化(转)的更多相关文章

  1. android ListView的介绍和优化

    xml设计 <?xml version="1.0"?> -<RelativeLayout tools:context=".MainActivity&qu ...

  2. Android ListView工作原理完全解析,带你从源码的角度彻底理解

    版权声明:本文出自郭霖的博客,转载必须注明出处.   目录(?)[+] Adapter的作用 RecycleBin机制 第一次Layout 第二次Layout 滑动加载更多数据   转载请注明出处:h ...

  3. Android ListView工作原理全然解析,带你从源代码的角度彻底理解

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android全部经常使用的原生控件其中.使用方法最复杂的应该就是 ...

  4. 代码优化>>>Android ListView适配器三级优化详解

    转载本专栏每一篇博客请注明转载出处地址,尊重原创.此博客转载链接地址:点击打开链接  http://blog.csdn.net/qq_32059827/article/details/52718489 ...

  5. Android ListView工作原理完全解析(转自 郭霖老师博客)

    原文地址:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android所有常用的原生控件当中,用法最复杂的应该就是ListVie ...

  6. Android ListView异步载入图片乱序问题,原因分析及解决方式

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android全部系统自带的控件其中,ListView这个控件算是 ...

  7. 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d3e3ab10c62013697408 作者:黄宁源 一,背景 Recy ...

  8. android listview Caused by: java.lang.ArrayIndexOutOfBoundsException: length=3; index=3

    android listview 适配器在多种类型viewType报错: Caused by: java.lang.ArrayIndexOutOfBoundsException: length=3; ...

  9. Android ListView使用BaseAdapter与ListView的优化 (转至 http://www.open-open.com/lib/view/open1339485728006.html)

    在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作.也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点.读者可 ...

随机推荐

  1. 多线程Demo

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. UDP TCP应用场景

    作者:陈硕链接:https://www.zhihu.com/question/20060141/answer/26735814来源:知乎著作权归作者所有,转载请联系作者获得授权. UDP 的使用范围很 ...

  3. C# 目录与文件管理

    文件读写 学习了一点点希望对以后的学习工作有帮助 在应用程序中基本任务是对数据的操作,这就是对数据进行访问和保存挤兑数据的读写,应用程序访问一个文本文件叫做“读”:对文本文件的内容进行修改后保存这些修 ...

  4. javascript 通用loading动画效果

    由于项目中多处要给ajax提交的时候增加等待动画效果,所以就写了一个简单的通用js方法: 代码如下: /*ajax提交的延时等待效果*/ var AjaxLoding = new Object(); ...

  5. Js template engine

    P http://www.jquery4u.com/javascript/10-javascript-jquery-templates-engines/ http://www.creativebloq ...

  6. DB天气app冲刺第六天

    更改计划 以前是准备完全自己写一个天气App 而且加上自己已经成功的做了一个安卓开发的小例子了,就感觉可以做的出来了.结果这五天证明自己一开始的思路就错了.所以上次跟别的同学问了一下.看了一下他们的方 ...

  7. django中外键关联表的查询随笔

    django中,如果一个数据库中的表之间有外键的话可以方便的通过一个表查询到其相关表的数据.如有下面三个model:class Blog(models.Model):    name = models ...

  8. [转载]C#实现POST提交方式

    网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以用来提取网页HTML的组件比较多,常用的用WebBrowser.WebClient.HttpWebRequest这三 ...

  9. jsp include包含html页面产生的乱码问题

    大家都知道在jsp中include的有两种方式,一种是<jsp:include page="">,另一种是<%@ include file="" ...

  10. Java Vector 类

    Vector类实现了一个动态数组.和ArrayList和相似,但是两者是不同的: Vector是同步访问的. Vector包含了许多传统的方法,这些方法不属于集合框架. Vector主要用在事先不知道 ...