ViewHolder.java

  1. package cn.edu.bzu.util;
  2.  
  3. import android.content.Context;
  4. import android.util.SparseArray;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.ImageView;
  9. import android.widget.TextView;
  10.  
  11. /**
  12. * Created by monster on 2015/4/20.
  13. * Have a good package ViewHolder
  14. * get(Context context,View convertView,ViewGroup parent,int layoutId,int position) To make ViewHolder
  15. *
  16. */
  17. public class ViewHolder {
  18. private SparseArray<View> mViews; //稀疏数组,SparseArray比HashMap执行效率高
  19. private int mPosition;
  20. private View mConvertView; //作用是方便系统在重写UI时,能重用原来实用过的View实例,以此来降低系统资源的消耗和提高代码效率
  21. /*
  22. *ConvertView的几点特征。
  23. *对于一个ListView,Android保存所有曾经生成过的ConvertView实例,直至系统垃圾回收这些实例位置,而不是只保存最后使用的ConvertView对象。
  24. *这些保存的ConvertView以使用时间顺序排序,并依次被传递到getView函数中。
  25. */
  26. public ViewHolder(Context context,ViewGroup parent,int layoutId,int position){
  27. //ViewHolder的构造方法
  28. this.mPosition=position;
  29. this.mViews=new SparseArray<View>(); //初始化SparseArray对象
  30. mConvertView= LayoutInflater.from(context).inflate(layoutId,parent,false);
  31. mConvertView.setTag(this);
  32. }
  33.  
  34. public static ViewHolder get(Context context,View convertView,ViewGroup parent,int layoutId,int position){
  35. if(convertView==null){
  36. return new ViewHolder(context,parent,layoutId,position);
  37. }else{
  38. ViewHolder holder=(ViewHolder)convertView.getTag();
  39. holder.mPosition=position;
  40. return holder;
  41. }
  42. }
  43.  
  44. /**
  45. * 通过viewId获取控件
  46. * @param viewId
  47. * @param <T>
  48. * @return
  49. */
  50. public <T extends View> T getView(int viewId){
  51. View view=mViews.get(viewId);
  52. if(view==null){
  53. view=mConvertView.findViewById(viewId);
  54. mViews.put(viewId,view);
  55. }
  56. return (T)view;
  57. }
  58. public View getConvertView() {
  59. return mConvertView;
  60. }
  61.  
  62. /**
  63. * 为设置TextView的值
  64. * @param viewId
  65. * @param text
  66. * @return
  67. */
  68. public ViewHolder setText(int viewId,String text){
  69. TextView tv=getView(viewId);
  70. tv.setText(text);
  71. return this;
  72. }
  73.  
  74. /**
  75. * 设置图片
  76. * @param viewId
  77. * @param resId
  78. * @return
  79. */
  80. public ViewHolder setImageResource(int viewId,int resId){
  81. ImageView view=getView(viewId);
  82. view.setImageResource(resId);
  83. return this;
  84. }
  85. }

MyAdapterWithCommonViewHolder.java

ListView优化-ViewHolder的优化备份的更多相关文章

  1. android:布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!

    1.布局优化 首先删除布局中无用的控件和层级,其次有选择地使用性能较低的viewgroup,比如布局中既可以使用RelativeLayout和LinearLayout,那我们就采用LinearLayo ...

  2. (转)Android之ListView原理学习与优化总结

    转自: http://jishu.zol.com.cn/12893.html 在整理前几篇文章的时候有朋友提出写一下ListView的性能优化方面的东西,这个问题也是小马在面试过程中被别人问到的….. ...

  3. Android为TV端助力 布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!

    1.布局优化 首先删除布局中无用的控件和层级,其次有选择地使用性能较低的viewgroup,比如布局中既可以使用RelativeLayout和LinearLayout,那我们就采用LinearLayo ...

  4. Android:ListView之ViewHolder

    前言 在开发Android应用过程中经常要与列表展示打交道,比如Listview.在使用过程中如果不能正确的进行细节处理那么对性能还是有很大的损耗的. Listview展示内容是通过一个Adapter ...

  5. Android性能优化之布局优化

    最新最准确内容建议直接访问原文:Android性能优化之布局优化 本文为Android性能优化的第二篇——布局优化,主要介绍使用抽象布局标签(include, viewstub, merge).去除不 ...

  6. Android 性能优化 三 布局优化ViewStub标签的使用

    小黑与小白的故事,通过虚拟这两个人物进行一问一答的形式来共同学习ViewStub的使用 小白:Hi,小黑,ViewStub是什么?听说能够用来进行布局优化. 小黑:ViewStub 是一个隐藏的,不占 ...

  7. 【网站seo优化】SEO优化每天的工作内容是什么?

    [网站seo优化]SEO优化每天的工作内容是什么?从未知的领域来到seo,感到搜索引擎无比神奇,接触seo久了,有每天必做的工作内容,大量的seo从业者,每天的工作内容大同小异,主要做的工作有通过相应 ...

  8. 微擎开启性能优化里面的性能优化memcache内存优化及数据库读写分离

    http://www.mitusky.com/forum.php?mod=viewthread&tid=3135 [微擎 安装使用] 微擎开启性能优化里面的性能优化memcache内存优化及数 ...

  9. SQL通用优化方案(where优化、索引优化、分页优化、事务优化、临时表优化)

    SQL通用优化方案:1. 使用参数化查询:防止SQL注入,预编译SQL命令提高效率2. 去掉不必要的查询和搜索字段:其实在项目的实际应用中,很多查询条件是可有可无的,能从源头上避免的多余功能尽量砍掉, ...

随机推荐

  1. 两个Canvas小游戏

    或许连小游戏都算不上,可以叫做mini游戏. 没有任何框架或者稍微有点深度的东西,所以有js基础的或者要追求炫酷效果的可以直接ctrl+w了. 先贴出两个游戏的试玩地址: 是男人就走30步 是男人就忍 ...

  2. unity3d 三分钟实现简单的赛车漂移

    提到赛车游戏,大家最关心的应该就是漂移吧?! 从学unity开始,我就一直在断断续续的研究赛车 因为自己技术太烂.悟性太差等原因,我走了不少弯路 也许你会说,网上那么多资料,你不会查啊 是啊!网上一搜 ...

  3. python动态网页爬取——四六级成绩批量爬取

    需求: 四六级成绩查询网站我所知道的有两个:学信网(http://www.chsi.com.cn/cet/)和99宿舍(http://cet.99sushe.com/),这两个网站采用的都是动态网页. ...

  4. 理解Android虚拟机体系结构

    1 什么是Dalvik虚拟机 Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的 ...

  5. HTC Vive 与Leap Motion 出现位置错误的问题

    Leap Motion已经支持VR, 但是官方没有支持HTC Vive的例子. 按照官方的文档, 其实是有问题的: https://developer.leapmotion.com/documenta ...

  6. MATLAB如何定义函数

    自定义函数的途径:M文件函数(M file function)在线函数(Inline Function)匿名函数(Anonymous Function)1.M文件函数范例function c=myad ...

  7. 判断移动端js代码

    var ua=navigator.userAgent.toLowerCase(); var contains=function (a, b){ if(a.indexOf(b)!=-1){return ...

  8. JavaScript instanceof 运算符深入剖析

    简介: 随着 web 的发展,越来越多的产品功能都放在前端进行实现,增强用户体验.而前端开发的主要语言则是 JavaScript.学好 JavaScript 对开发前端应用已经越来越重要.在开发复杂产 ...

  9. 35-less 简明笔记

    分屏显示文本文件 less [options] [file-list] less与more类似,但比more更加完善 例如:在显示一屏文本之后,less将显示提示副等待下一条命令的输入;可以向前或向后 ...

  10. android 布局之scrollview

    今天在布局页面的时候后犯了难,我要显示的内容一个页面展示不完,怎么办呢? 于是随便找了个app点开一看,哎呀原来还能翻动啊!这是啥布局呢?原来是ScrollView 官方api相关的内容全是英文,这可 ...