目前在写项目的过程中,虽然 RecyclerView 已经出来很久了,但是仍有一部分朋友(包括我)再继续使用着 ListView,GridView .
在使用的过程中,使用 ViewHolder 进行 ListView,GridView 的优化,是必不可少的,所以,我们每次在 getView 的方法中 都会去利用 ViewHolder 去进行 View 的复用。
写法如下:

@Override
public View getView(int position, View convertView, ViewGroup parent) {//ViewHolderViewHolder viewHolder=null;//绘制每一项的时候先判断convertView是否为空,不为空,则else里面去复用,为空,则重新赋予item布局if (convertView == null) {//new出ViewHolder ,初始化布局文件viewHolder = new ViewHolder();convertView = LayoutInflater.from(mContext).inflate(R.layout.item_test, null);viewHolder.tv_name= (TextView) convertView.findViewById(R.id.tv_name);//调用convertView的setTag方法,将viewHolder放入进去,用于下次复用convertView.setTag(viewHolder);} else {//复用已经存在的item的项viewHolder = (ViewHolder) convertView.getTag();}viewHolder.tv_name.setText(listBeans.get(position));return convertView;}class ViewHolder {TextView tv_name;}

这样的写法使得我们即便 Item 里面只有一两个控件,也都要去写一个 ViewHolder ,这也就算了,如果 Item 里面控件多了,我们就需要花费一定的时间先去创建 ViewHolder。 不知道有没有朋友想过寻找一些简化的方法。

我这里整理出一个简化使用 ViewHolder 的方法,相对于创建上面的 getTag() setTag(), 要优雅许多,并且在使用上,也避免了做一些重复性的工作。
这里直接写为一个工具类:

public class ViewHolder {public static <T extends View> T get(View view, int id) {SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();if (viewHolder == null) {viewHolder = new SparseArray<View>();view.setTag(viewHolder);}View childView = viewHolder.get(id);if (childView == null) {childView = view.findViewById(id);viewHolder.put(id, childView);}return (T) childView;}
}

然后在 getView 中使用方式为:

@Override
public View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = LayoutInflater.from(mContext).inflate(R.layout.item_test, null);}TextView tv_name = ViewHolder.get(convertView , R.id.tv_name);tv_name.setText(listBeans.get(position));return convertView;}

相对于上面的第一种写法,是不是更加的简洁,优雅~

这里作为平时的积累,希望能给一些朋友带来帮助~

进一步简化你的 ViewHolder相关推荐

  1. Spring Integration Java DSL示例–使用Jms名称空间工厂进一步简化

    在较早的博客文章中,我谈到了虚拟卢布·戈德堡流程,该流程通过一系列复杂的步骤将字符串变成大写,本文的前提是引入Spring Integration Java DSL,作为通过xml配置文件定义集成流程 ...

  2. WePY,微信小程序开发利器,进一步简化小程序开发难度

    小程序发展到了今天,已经开放出了太多的利好消息,API 也已经非常丰富和完善了. 但是开发小程序,很多时候非常繁琐,这个原因是小程序的架构,编写一个页面需要4个文件: page.wxml page.w ...

  3. 写更少代码,进一步简化你ListView的Adaptor

    最近面试了一些安卓开发人员,我常问的问题就是关于listview的优化,大家知道,ListView的优化,真的是老问题了,但是百问不厌. ListView最通用的写法,写一个listview,然后定义 ...

  4. 更加简洁且通用的ViewHolder写法

    一.进一步简化你的 ViewHolder 目前在写项目的过程中,虽然 RecyclerView 已经出来很久了,但是仍有一部分朋友(包括我)再继续使用着 ListView,GridView .  在使 ...

  5. Android 优秀文章收集整理集合

    转载 自    https://github.com/jiang111/awesome-android-tips 记录自己遇到的比较有价值的Android相关的blog MaHua是online md ...

  6. Android优秀文章收集(转载)

    http://blog.csdn.net/u010375364/article/details/52200425 http://blog.csdn.net/u010375364/article/det ...

  7. .NET一个线程更新另一个线程的UI(两种实现方法及若干简化)

    本片博文接上一篇:.NET多线程执行函数,给出实现一个线程更新另一个线程UI的两种方法. Winform中的控件是绑定到特定的线程的(一般是主线程),这意味着从另一个线程更新主线程的控件不能直接调用该 ...

  8. Spring-注入参数详解-[简化配置方式]

    概述 字面属性值 字面值属性 构造函数参数 集合元素 引用对象属性 字面值属性 构造函数参数 集合元素 使用P命名空间 通过p命名空间引用字面属性值 通过p命名空间引用其他bean 概述 Spring ...

  9. 超简单-用协程简化你的网络请求吧,兼容你的老项目和旧的网络请求方式

    前言 在Kotlin协程(后简称协程)出来之后,颠覆了我们很多工具类的封装方式,大大简化了我们很多api的调用,并且使异步操作逻辑更清晰了 其中一个很标志性的地方就属网络请求了,以前的网络请求方式声明 ...

最新文章

  1. shell脚本的命令行传参
  2. EFMVC - ASP.NET MVC 3 and Entity Framework 4.1 Code First 项目介绍
  3. 阿里云使用笔记-MySQL远程连接-centos7
  4. 图文具体解释 IntelliJ IDEA 15 创建 Maven 构建的 Java Web 项目(使用 Jetty 容器)
  5. mysql auto_increment 原理_[Mysql]mysql原理之Auto_increment
  6. 分析cocos2d-x中的CrystalCraze示例游戏
  7. 远控免杀专题(23)-SharpShooter免杀
  8. CSS中position的absolute和relative用法
  9. iOS获取某个日期后n个月的日期
  10. IOS UIColor 自定义颜色
  11. 裁判文书网爬虫(2019.5.15更新)
  12. 计算机显示器画画的清晰度,如何设置显示器分辨率让画面更清晰
  13. 埃及分数数学模型c语言,C语言将真分数分解为埃及分数代码解析
  14. JBOSS启动错误:Not pointing to a directory
  15. LeetCode07整数反转(JAVA)
  16. Resource exhausted: OOM when allocating tensor with shape[620,20000] and type float on /job:localhos
  17. PinYin4j使用教程
  18. Android ViewPager嵌套ViewPager+Fragment问题
  19. TCP/IP中的TTL
  20. 偏差,残差,方差在机器学习中的区别

热门文章

  1. 腾讯2020年未來展望_2020年编程语言展望
  2. windows的命令行
  3. ROS 导航——SLAM之用Gmapping构建一张地图
  4. 好用的财务报销系统改变财务模式
  5. TPC-DS标准规范(6)
  6. Anomaly detection system——异常检测系统简介与设计
  7. 传统的库存管理与看板管理(JIT)(zt)
  8. 不同核数cpu php速度,计算机的性能指标完全由CPU决定对吗
  9. 今天是清明节,心灵的祭奠
  10. 人工智能图像修复研究,人工智能图像信息处理