View中的setTag(Onbect)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来。

可以用在多个Button添加一个监听器,每个Button都设置不同的setTag。这个监听器就通过getTag来分辨是哪个Button 被按下。

  import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;public class Main extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Button button1 = (Button) findViewById(R.id.Button01);Button button2 = (Button) findViewById(R.id.Button02);Button button3 = (Button) findViewById(R.id.Button03);Button button4 = (Button) findViewById(R.id.Button04);MyListener listener = new MyListener();button1.setTag(1);button1.setOnClickListener(listener);button2.setTag(2);button2.setOnClickListener(listener);button3.setTag(3);button3.setOnClickListener(listener);button4.setTag(4);button4.setOnClickListener(listener);}public class MyListener implements View.OnClickListener {@Overridepublic void onClick(View v) {int tag = (Integer) v.getTag();switch (tag) {case 1:System.out.println("button1 click");break;case 2:System.out.println("button2 click");break;case 3:System.out.println("button3 click");break;case 4:System.out.println("button4 click");break;}}}
}

在写listView 时候要重写BaseAdapter

需要在没个item都加上button 点击button做相应操作

这个时候需要button里面设置下 这行的属性

button.setTag(item.user.name);

然后处理button事件。

这个东西在一些需要用到Adapter自定控件显示方式的时候非常有用

Adapter 有个getView方法,可以使用setTag把查找的view缓存起来方便多次重用

 public View getView(int position, View convertView, ViewGroup parent) {ViewHolder vh;if (convertView == null) {LayoutInflater inflater = (LayoutInflater) mWidgetsSwitchApp.getSystemService(Context.LAYOUT_INFLATER_SERVICE);convertView = inflater.inflate(R.layout.app_gallery_item, null);vh = new ViewHolder();vh.view1 = (ImageView) convertView.findViewById(R.id.view1);vh.view2 = (ImageView) convertView.findViewById(R.id.view2);vh.view3= (ImageView) convertView.findViewById(R.id.view3);vh.view4 = (ImageView) convertView.findViewById(R.id.view4);convertView.setTag(vh);} else {vh = (ViewHolder) convertView.getTag();}//其他的代码可以直接使用 vh.view1、vh.view2、vh.view3 、vh.view4
}

你可以看看android的源码,特别有listview的,你就会发现这个函数很多时候有妙用!呵呵!

我的一点理解是,绑定数据,特别是绑定数据到view。而且可以用getTag()取得,很方便,而且是任意类型的数据,真的很酷。

在实例BaseAdapter()的getView(position, convertView, par)里有用到。convertView这里会用到setTag() getTag()。就可以生成convertView并复用里面的widget

一直觉得这个东西没啥用setTag(),不过只要能用上 就是比较巧的了

在一个程序中呢 我有好多个button 我想点击一个出现1 点击第二个出现2

Java代码:

for (int i = 0; i < 20; i++) {cells[i] = (ImageView) findViewById(cellIDs[i]);cells[cellnumber++].setOnClickListener(new OnClickListener() {public void onClick(View v){cellClicked(cellnumber, v);}});}

上面的代码效率不高 而且 无论点击哪一个都会出现21 当然这是我逻辑错误,那怎么实现呢?

Java代码:

 OnClickListener listener = new OnClickListener() {public void onClick(View v) {int cellId = (Integer) v.getTag();cellClicked(cellId, v);}}View v;for (int i = 0; i < 20; i++) {v = findViewById(cellIDs[i]);v.setOnClickListener(listener);v.setTag(i);}

Android setTag()/getTag()相关推荐

  1. android tag的使用方法,Android setTag方法的key问题解决办法

    android在设计View类时,为了能储存一些辅助信息,设计一个一个setTag/getTag的方法.这让我想起在Winform设计中每个Control同样存在一个Tag. 今天要说的是我最近学习a ...

  2. Android setTag和getTag()的使用

    首先我们要知道setTag方法是干什么的,SDK解释为 Tags Unlike IDs, tags are not used to identify views. Tags are essential ...

  3. Android setTag 使用

    setTag 可给控件附加存储任意类型 值 1. setTag(Object object) 当只需要存储一个的时候使用. view.setTag(Object tag) view.getTag(); ...

  4. Android开发之适配器-ListView适配器的重复数据

    适配器是Android中的数据与View视图的桥梁,作用就是将数据通过适配器显示到对应的View视图上. 工作中,在用ListView做适配器数据时候,有些人肯定碰见过,如何优化效率,但是又出现重复数 ...

  5. Android 百度鹰眼 SDK

    1.创建鹰眼服务 进入鹰眼轨迹管理台 http://lbsyun.baidu.com/trace/admin/service 创建服务 获取到服务ID158542 2.下载demo http://lb ...

  6. Android 接入华为通知栏推送教程(特此整理)

    前言: 受华为开发者联盟工作人员的邀约,特此将本篇博客重新整理一遍,希望让更多人受益,大家也可以参加华为开发者联盟推出活动,去提问自己的问题或者投稿. 扫二维码就可以参与活动哦. 首先本教程是基于华为 ...

  7. 安卓第八夜 玛丽莲梦露

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 上一讲说明了数据库中存取数据的方法.这一讲将以条目的视图方式,来以相似的视图方式, ...

  8. 百度地图轨迹(Andriod SDK)

    项目结构 BaseActivity.java package siso.track.activity;import android.app.Activity; import android.os.Bu ...

  9. 【Mark 】AndroidStudio_移动应用开发

    Content Android开发环境的配置与准备 Android 概述 Android UI 开发 Activity 数据存储 UI进阶 内容提供者 广播接收者 服务 什么是 Android? 安卓 ...

最新文章

  1. 成为Python大牛必须要掌握的高端语法(附链接代码)
  2. C++学习手记四:继承和多态
  3. ((ios开发学习笔记五))手动创建Tab Bar Controller 程序
  4. 北风设计模式课程---13、享元模式
  5. Redis -基础命令
  6. php中json_decode返回数组或对象的实例
  7. 龙芯.NET正式发布 稳步推进生态建设
  8. python连接mysql用哪个模块_Python连接MySQL数据库之pymysql模块使用
  9. iphone 流媒体
  10. Vue Nginx反向代理配置 解决生产环境跨域
  11. http://blog.csdn.net/evankaka/article/details/45155047
  12. net framework 4.0安装未成功,原因是?
  13. Python--图片转字符画
  14. 农夫山泉下场当“烧水工”,熟水市场是“鸡肋”还是“机遇”?
  15. 训练集和验证集的划分
  16. emacs java_Emacs配置与使用
  17. Win10系统新款便笺便签居然可以这么好用
  18. csdn竟然还有这种神器!后悔没有早点知道!超好用的csdn插件,别再犹豫了,赶快入手吧!
  19. python在手机上可以画图吗_python简单画图教程!python怎么在屏幕上画图
  20. 关闭虚拟机linux防火墙命令

热门文章

  1. python 加注拼音-一个将汉字转换成汉语拼音的python库的代码
  2. 以下可以采用python语言保留字的是-模拟试卷C单项选择题
  3. ROS调用本地摄像头数据并在rviz里显示
  4. pycharm导入本地py文件时,模块下方出现红色波浪线时如何解决
  5. matlab求kcf算法响应图_剖析KCF
  6. lua学习笔记之数据结构
  7. LeetCode 450 Delete Node in a BST(二叉搜索树中的删除结点)
  8. LeetCode Max Points on a Line
  9. jQuery解决鼠标单双击问题
  10. 函数:使用递归实现阶乘