import android.util.SparseArray;
import android.view.View; /**
* 封装了setTag()和getTag()方法
* 封装了findViewById()方法
* ViewHolder为ListView的每个条目打上tag,
* 这个tag是一个数组对象,里面存储每个条目所包含的子控件对象,key为资源id
* 当listview滑出顶部时,最上面的条目(convertView)被回收
* 最下面需要显示的条目就不需要再用父容器去找子控件(耗时操作),
* 而是直接取得父容器的tag,在tag中获取到子控件对象
*
*
*/
public class ViewHolder {
/**
*
*
*
* @param view
* 控件父容器对象
* @param id
* 控件id
* @return 控件对象
*/
@SuppressWarnings("unchecked")
public static <T extends View> T get(View view, int id) {
// 如果父容器不为空,获取父容器的tag,为数组初始化............
SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
if (viewHolder == null) {
// 如果数组为空,新建数组
viewHolder = new SparseArray<View>();
// 将父容器打上数组的tag...............
view.setTag(viewHolder);
}
// 根据控件的资源id在数组中找控件
View childView = viewHolder.get(id);
// 如果控件为空
if (childView == null) {
// 在父容器找
childView = view.findViewById(id);
// 将控件的资源id和控件对象存到数组中
viewHolder.put(id, childView);
}
// 返回子控件
return (T) childView;
}
}

Android ViewHolder工具的更多相关文章

  1. 最新版Android开发工具

    最新版Android开发工具 JUN 27TH, 2014 Android Tools ADT Bundle ADT Bundle包含了Eclipse.ADT插件和SDK Tools,是已经集成好的I ...

  2. 腾讯优测优分享 | Android性能测试工具化实现

    腾讯优测专业的移动云测试平台,自动化测试提供性能测试数据,云真机实时输出性能数据,让测试更简单! 1.Android性能测试介绍 提到Android性能测试,我们总免不了俗地要首先介绍下Android ...

  3. Android开发工具全面转向Android Studio(3)——AS project/module的目录结构(与Eclipse对比)

    如果AS完全还没摸懂的,建议先看下Android开发工具全面转向Android Studio(2)——AS project/module的CRUD. 注:以下以Windows平台为标准,AS以目前最新 ...

  4. Android开发工具全面转向Android Studio(2)——AS project/module的CRUD

    本文有些地方可能需要衔接Android开发工具全面转向Android Studio(1)——准备开发环境,读起来效果会更好. 这个世界很奇妙,所有的东西离不开CRUD,即增删改查.即使人本身也遵循这个 ...

  5. Android性能测试工具(一)之Emmagee

    Android性能测试工具(一) 之Emmagee Emmagee是监控指定被测应用在使用过程中占用机器的CPU.内存.流量资源的性能测试小工具. 支持SDK:Android2.2以及以上版本 Emm ...

  6. 53. Android常用工具类

    主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefer ...

  7. android 破解工具

    来记录一下本人在平时工作中使用的android上的破解工具 静态破解: apktool: apk包 -> dex dex2jar和enjarify(google官方出品): dex->ja ...

  8. Android 常见工具类封装

    1,MD5工具类: public class MD5Util { public final static String MD5(String s) { char hexDigits[] = { '0' ...

  9. 工具推荐:2016年最佳的15款Android黑客工具

    黑客技术,曾被认为是专家的专有领域,但随着技术的崛起和移动安全领域的进步,黑客技术已经变得越来越普遍.随着人们越来越依赖于智能手机和其它的便携式设备来完成他们的日常活动,我们有必要了解一些Androi ...

随机推荐

  1. MySQL逻辑备份与恢复

    备份:mysqldump -uroot -p yyzc department > /home/admin/yyzc_backup.sql 恢复:mysql -uroot -p yyzc < ...

  2. MyEclipse------如何添加jspsmartupload.jar+文件上传到服务器

    下载地址:http://download.csdn.net/detail/heidan2006/182263 如何添加jspsmartupload.jar:右键“Web”工程->properti ...

  3. Java 获取距离最近一段时间的时间点

    if (timeFilter == 1) {// 最近三个月 long curTimeSeconds = System.currentTimeMillis() / 1000L; para.put(&q ...

  4. Hadoop的datanode无法启动

    Hadoop的datanode无法启动 hdfs-site中配置的dfs.data.dir为/usr/local/hadoop/hdfs/data 用bin/hadoop start-all.sh启动 ...

  5. 锋利的jQuery-2--判断jQuery获取到的对象是否存在$().length

    1.使用js获取不存在的对象: document.getElementById("tt").style.color = "red"; 如果网页中不存在id = ...

  6. FCK编辑器漏洞总结

    1.查看编辑器版本FCKeditor/_whatsnew.html————————————————————————————————————————————————————————————— 2. Ve ...

  7. Android打电话&发短信

    public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView ...

  8. Java调用动态库方法说明-最详细

    Java不能直接调用由c或者c++写得dll(TF_ID.dll),所以只能采用jni得方法,一步一步生成符合规范得dll文件(假设叫FANGJIAN.dll),在FANGJIAN.dll这个文件里来 ...

  9. Socket网络编程(3)--两端通信

    上篇博文:http://www.cnblogs.com/wolf-sun/p/3329558.html 介绍了客户端连接服务端,一对一,多对一的情况,下面实现服务器接收消息的功能.LZ这些弄的比较慢, ...

  10. endnote参考文献格式设置

    endnote参考文献格式调整: 在office word 2010中加载了endnote x7插件之后,使用过程中发现格式有点乱,不该斜的地方斜体显示,该加方框[]的地方却没有方框,因此从网路上找资 ...