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. }

最新文章

  1. MVC5+EF6+MYSQl,使用codeFirst的数据迁移
  2. 设计C/S架构应用程序的并发功能
  3. “You couldn’t see my tears cause I am in the water.“ Fish said to water.“But I could feel your tears cause you are in my heart..“ Answered water.
  4. 6.1-6.5关于html
  5. javascript的事件监听与捕获和冒泡
  6. scala之method和function的区别
  7. solr 相似查询-MoreLikeThis
  8. perl 变量详解
  9. JavaScript效果之选项卡
  10. the c programming language 2-3
  11. hdu3401:单调队列优化dp
  12. Linux scp文件复制
  13. read/sysread区别
  14. node-koa搭建MVC/RESTful API项目
  15. SpagoBi开发示例——员工离职人数统计
  16. JAVA_SE基础——22.面向对象的概念
  17. 20181219-PostgreSQL 流复制监控脚本
  18. day1.接口测试(概念、Postman、SoapUI、jmeter)
  19. mac os系统go安装:go install github.com/nsf/gocode: open /usr/local/go/bin/gocode: permission denied
  20. 12 postgresql数据库备份和恢复

热门文章

  1. Mysql复习大全(转)
  2. Linux 文件查找命令详解
  3. java.net.ServerSocket 解析
  4. nginx配置学习总结
  5. [翻译] 一个kubernetes网络简明教程[Part 1]
  6. MVC开发中的常见错误-04-“System.NullReferenceException”类型的异常在 BBFJ.OA.WebApp.dll 中发生,但未在用户代码中进行处理
  7. bootstrap 列表--水平定义列表
  8. ERP完善合同起草(二十八)
  9. poj 3233 S = A + A^2 + A^3 + … + A^k A是一个n X n矩阵 (矩阵快速幂)
  10. Asp.Net Core 2.0 项目实战(3)NCMVC角色权限管理前端UI预览及下载