1.用于区分非常多类似的View

比如:

button1.setOnClickListener(new OnClickListener ... );
button2.setOnClickListener(new OnClickListener ... );

它们可能运行类似的逻辑,但你必须分别为两个Button设置两个独立的OnClick事件,

public void onClick(View v) {
doAction(1); // 1 for button1, 2 for button2, etc.
}

之所以这样做。由于onClick仅仅有一个參数View。我们能够通过setTag和getTag来完毕:

button1.setTag(1);
button2.setTag(2);

我们能够将两个button设置同一个OnClickListener,比方:

listener = new OnClickListener() {
@Override
public void onClick(View v) {
doAction(v.getTag());
}
};

这样,就能够通过getTag区分。

2.用于ListView的复用

我们自己写自己定义adapter的时候,一般会使用它。比方:

static class ViewHolder {
TextView tvPost;
TextView tvDate;
ImageView thumb;
} public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) {
LayoutInflater inflater = myContext.getLayoutInflater();
convertView = inflater.inflate(R.layout.postitem, null); ViewHolder vh = new ViewHolder();
vh.tvPost = (TextView)convertView.findViewById(R.id.postTitleLabel);
vh.tvDate = (TextView)convertView.findViewById(R.id.postDateLabel);
vh.thumb = (ImageView)convertView.findViewById(R.id.postThumb);
convertView.setTag(vh);
}
....................
}

3.注意:

除了上述情况以外,我们尽量不要直接使用,原因:

1.代码可读性:会给其它的程序猿造成困扰

2.由于setTag和getTag设置的是一个Object对象。可能会出现类的转换异常

只是,android4.0以后。有一个更好的方法:setTag(int key, Object tag)能够通过类似<k,v>键值对的方式存取。

未经同意不得用于商业目的

欢迎增加QQ群讨论:android开发联盟: 272209595

最新文章

  1. Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法
  2. IIS7.5 伪静态 脚本映射 配置方法
  3. JavaScript思维导图—流程控制
  4. 从Paxos到ZooKeeper-三、ZooKeeper的典型应用场景
  5. 细说jQuery原型的创建和实现原理,并用实例简单模仿
  6. 【转载】拒绝平庸——浅谈WEB登录页面设计
  7. epoll的lt和et模式的实验
  8. hdu2053
  9. 基于zmap 的应用层扫描器 zgrab (一)
  10. [剑指OFFER] 斐波那契数列- 跳台阶 变态跳台阶 矩形覆盖
  11. js定时跳转
  12. Recover a file when you use git reset head by mistake.
  13. linux 压缩zip包
  14. 墨卡托投影坐标系(Mercator Projection)原理及实现C代码
  15. 【树状数组】BZOJ3132 上帝造题的七分钟
  16. hadoop HA 详解
  17. DDD - 概述 - (一)
  18. 深入理解ASP.NET MVC(7)
  19. Chrome 无法加载Shockwave Flash
  20. 宇宙最帅叉叉——第五周博客 for 测试与发布(Alpha版本)

热门文章

  1. OpenCV/CUDA/Qt 环境配置小结
  2. css3实现卷页效果http://jingyan.baidu.com/article/73c3ce2806aef9e50343d93a.html
  3. 如何使用 sqlite3 访问 Android 手机的数据库
  4. Namespace declaration statement has to be the very first statement in the script
  5. ECCV 2014 Results (16 Jun, 2014) 结果已出
  6. 用Qemu模拟vexpress-a9 (六) --- 多核
  7. DevExpress RichEditControl 上下翻页功能 z
  8. Memcached 集群架构方面的问题
  9. Oracle用imp和exp实现数据的导入和导出
  10. tomcat完整配置