1. ViewHolder holder = null;
  2. if(convertView == null){
  3. convertView = mInflater.inflate(R.layout.xxx null);
  4. holder = new ViewHolder();
  5. holder.tvXXX = (TextView)findViewById(R.id.xxx);
  6. //...一连串的findViewById
  7. }
  8. else{
  9. holder = (ViewHolder) convertView.getTag();
  10. }
  11. private static class ViewHolder{
  12. TextView tvXXX;
  13. //很多view的定义
  14. }

这么写一次还行,但问题是总有很多很多的ViewAdapter要这么写,每次都repeat,repeat,repeat  累啊。      所以,有这么一种简洁的写法分享给大家,先声明,从国外网站上看的,不是自己原创的,但确实很喜欢这个简洁的设计。

ViewHolder这么写(只提供一个静态方法,其实可以加一个私有构造函数防止外部实例化),代码很简单,看过就明白了

  1. public class ViewHolder {
  2. // I added a generic return type to reduce the casting noise in client code
  3. @SuppressWarnings("unchecked")
  4. public static <T extends View> T get(View view, int id) {
  5. SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
  6. if (viewHolder == null) {
  7. viewHolder = new SparseArray<View>();
  8. view.setTag(viewHolder);
  9. }
  10. View childView = viewHolder.get(id);
  11. if (childView == null) {
  12. childView = view.findViewById(id);
  13. viewHolder.put(id, childView);
  14. }
  15. return (T) childView;
  16. }
  17. }

在getView里这样

    1. @Override
    2. public View getView(int position, View convertView, ViewGroup parent) {
    3. if (convertView == null) {
    4. convertView = LayoutInflater.from(context)
    5. .inflate(R.layout.banana_phone, parent, false);
    6. }
    7. ImageView bananaView = ViewHolder.get(convertView, R.id.banana);
    8. TextView phoneView = ViewHolder.get(convertView, R.id.phone);
    9. BananaPhone bananaPhone = getItem(position);
    10. phoneView.setText(bananaPhone.getPhone());
    11. bananaView.setImageResource(bananaPhone.getBanana());
    12. return convertView;
    13. }

android:ViewHolder模式的更多相关文章

  1. android 启动模式介绍

    Android启动模式 (1)Task:与Android系统是个多任务的系统中的任务是不同的.后者更倾向于多进程和多线程来说的,而这里的任务与application(应用程序)和activity(活动 ...

  2. android夜间模式实现

    一.概述 android夜间模式实现分为两大类 重启activity的实现 不重启activity的实现 二.正文 1.重启activity实现夜间模式[在界面文件中的实现部分] 1.1在attrs. ...

  3. android MVP模式介绍与实战

    android MVP模式介绍与实战 描述 MVP模式是什么?MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数 ...

  4. Android MVC模式

    Android MVC模式 下面是我对Android MVC模式的理解 Model 模型层 包括实体模型层,存放程序中调用的实体. 业务模型层,存放程序中调用的业务逻辑.   View 显示层  An ...

  5. Android MVP模式

    转自http://segmentfault.com/blogs,转载请注明出处Android MVP Pattern Android MVP模式\[1\]也不是什么新鲜的东西了,我在自己的项目里也普遍 ...

  6. android recovery模式及ROM制作

    转自android recovery模式及ROM制作 1.总述 为了方便客户日后的固件升级,本周研究了一下android的recovery模式.网上有不少这类的资料,但都比较繁杂,没有一个系统的介绍与 ...

  7. Android MVP模式 简单易懂的介绍方式

    主要学习这位大神的博客:简而易懂 Android MVP模式 简单易懂的介绍方式 https://segmentfault.com/a/1190000003927200

  8. 封装使用ViewHolder模式的Adapter组件,及用其快速实现聊天界面

    大家都对viewholder模式并不陌生吧,避免了重复调用findViewbyId,并对convertview进行重用.但是,开发中可能会有这样的困扰,每次在创建Adapter类时,总会有许多的重复代 ...

  9. Android 启动模式--任务(Task)--桟 的误区

    Android 启动模式--任务(Task)--桟 的误区 写这篇文章是因为前几天的一次面试,面试官说SingleInstance模式会新建一个桟,而SingleTask不会.首先不说这个对不对(非要 ...

随机推荐

  1. Android GsmCellLocation.getCellLocation返回NULL

    Android GsmCellLocation.getCellLocation返回NULL 1.首先 获取服务 telephonyManager =(TelephonyManager)getSyste ...

  2. javascript 浮点数比较

    Js中两个浮点数比较,不能使用=== 必须用相减绝对值小于极小的一个数字来判断 Math.abs(1/3 - (1-2/3))<0.0001 这样的方式来判断.

  3. Android开发之深入理解Android Studio构建文件build.gradle配置

    摘要: 每周一次,深入学习Android教程,TeachCourse今天带来的一篇关于Android Studio构建文件build.gradle的相关配置,重点学习几个方面的内容:1.applica ...

  4. oracle进阶之connect by笔记

    本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. http://www.cnblogs.com/king-xg/p/6794562.html 如果觉得对您有帮 ...

  5. Oracle 相关概念

    注:本文来源于 <腾科OCP培训课堂>.非准许商业活动. 标题:Oracle  相关概念 --->数据库名.实例名.数据库域名.全局数据名.服务名 一:数据库名 1:什么是数据库名 ...

  6. how to detect circles and rectangle?

    opencv中对圆检测的函数为:HoughCircles(src_gray,circles,CV_HOUGHT_GRADIENT,1,src_gray.cols/8,200,100,0,0) circ ...

  7. cf932d 树上倍增

    题解链接 https://blog.csdn.net/my_sunshine26/article/details/79338601 感觉能做,但是倍增还不是很熟悉,回头再补

  8. hdu4052矩形面积并

    建模需要注意下细节,,这是做扫描线的惯例,就是最好把模型建立在笛卡尔坐标系上 剩下的看链接和注释https://blog.csdn.net/shiqi_614/article/details/7983 ...

  9. PyCharm更改字体和界面样式

    更改主题 File → Settings → Appearance & Behavior → Appearance → Theme 结果: 更改字体大小 File → Settings → E ...

  10. 依赖注入与Unity

    关于控制反转(Inversion of Control)和依赖注入(Dependency Injection)大家网上可以找下相关概念,在<小菜学习设计模式(五)-控制反转(Ioc)>这篇 ...