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. IntelliJ IDEA 通过GsonFormat插件将JSONObject格式的String 解析成实体

    GsonFormat插件主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高. 插件地址:https://plugins.jetbr ...

  2. 洛谷P1638逛画展

    传送门啦 只需记录满足条件的一个区间的初始端点 $ (head, tail) $ ,不断删掉左端点 $ head $ ,不断更新右端点 $ tail $ : 开一个 $ vis[] $ 记录一下每幅画 ...

  3. PHP获取文件后缀名

    PHP获取文件后缀名是PHP学习者常见的一种操作,无论是在面试过程中还是PHP新手自学中.PHP获取文件后缀名都是很普遍的需要掌握的一个知识点. 下面我们就给大家总结介绍PHP获取文件扩展名也就是后缀 ...

  4. cf1061D 贪心+multiset 好题!

    cf上的思维题真好! 本题是在模拟的基础上贪心即可:将n段时间按照左端点(右端点为第二关键字)从小到大排序,然后遍历每一个时间段. 对于每一个时间段[li,ri],先找到multiset中最靠近li但 ...

  5. Git强制更新本地库和冲突解决

    1.You have not concluded your merge. (MERGE_HEAD exists) 本地有修改和提交,如何强制用远程的库更新.出现这种情况一般是git本地有commit, ...

  6. python全栈开发day27-网络编程

    回顾:1.两个架构:C/S   B/S(统一了应用的接口)2.同一个电脑两个py文件通信(文件)3.两个电脑通信---网线4.交换机的通信方式:广播.单播.组播5.arp协议:通过ip地址找到对应的m ...

  7. Codeforces Round #424 E. Cards Sorting

    题目大意:给你一堆n张牌(数字可以相同),你只能从上面取牌,如果是当前牌堆里面最小的值则拿走, 否则放到底部,问你一共要操作多少次. 思路:讲不清楚,具体看代码.. #include<bits/ ...

  8. BZOJ2618 [Cqoi2006]凸多边形 凸包 计算几何

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2618 题意概括 给出多个凸包,求面积交. 题解 首先我们考虑两个凸包相交的情况. 例题:HDU16 ...

  9. 在phpstorm中svn的使用

    目 录 1.搭建svn环境 1.1搭建svn服务端  1.2创建svn用户和密码 2.开始在phpstorm中链接svn 2.1打开Subversion 2.2 输入svn地址 2.3选择导出文件,进 ...

  10. 什么?作为程序员的你还不知道怎么访问 Google

    今天就一个目的,让你可以FQ成功,其他人我不知道,但就程序员来说,不能使用 Google 那真是一大损失,当然还有对所有人适用的 YouTobu 这个视频网站,资源多的没话说,别的不说,学习英语很方便 ...