setTag () 是 Android 的 View 类中很有用的一个方法,可以用它来给控件附加一些信息,在很多场合下都得到妙用。我们可以看到 setTat() 有两个方法重载,setTag(Object object)setTag(int key,Object object)参数类型 都带有 Object 也就是 可以保存任何 对象数据。
下面分别介绍下相关使用方法。


void setTag(Object tag)

这个方法相对简单,如果只需要设置一个 tag,那么直接调用 setTag(Object tag) 取值:view.getTag();方法就可以轻松搞定。

void setTag (int key, Object tag)

官方的api文档中提到:

“ The specified key should be an id declared in the resources of the application to ensure it is unique (see the ID resource type). Keys identified as belonging to the Android framework or not associated with any package will cause an IllegalArgumentExceptionto be thrown.”

所以抛出 IllegalArgumentException 的原因就在于 key 不唯一,那么如何保证这种唯一性呢?很明显定义一个 final 类型的 int 变量和硬编码一个值的方式都是行不通的。比如下面一个错误的例子:

private static final int TAG_ONLINE_ID = 1;((Button)row.findViewById(R.id.btnPickContact)).setTag(TAG_ONLINE_ID,objContact.onlineid);
05-18 20:29:38.044: ERROR/AndroidRuntime(5453): java.lang.IllegalArgumentException: The key must be an application-specific resource id.
05-18 20:29:38.044: ERROR/AndroidRuntime(5453):
at android.view.View.setTag(View.java:7704)
05-18 20:29:38.044: ERROR/AndroidRuntime(5453):
at com.mypkg.viewP.inflateRow(viewP.java:518)

那如果一定需要使用多个 tag 绑定怎么做呢?
那么这么做,在res/values/strings.xml中添加

<resources>
<item type="id" name="tag_first"></item>
<item type="id" name="tag_second"></item>
</resources>

使用

imageView.setTag(R.id.tag_first, "Hello");
imageView.setTag(R.id.tag_second, "Success");

就这就保证了 key 值的唯一性。

取值

String tag_first=v.getTag(R.id.tag_first).tostring();

就能取到值了!

Android 不得不知Tag的妙用相关推荐

  1. android 模拟nfc tag,android nfc tag3 调试日记

    android nfc tag3 调试日记 又到了每天最愉快的调试android nfc模块的时候.nfcpy中有一段示例代码:listen.py 大致是模拟nfc tag3卡片.里面对pmm(设备号 ...

  2. Android 播放mp3 tag乱码分析之jni 篇

    Android media 扫描mp3文件这个重任是cpp来完成的.但是tag解析工作是上层java完成的. 乱码问题的根源是:   java内部是使用16bit的unicode编码(UTF-16)来 ...

  3. Android中focusable属性的妙用——底层按钮的实现

    2019独角兽企业重金招聘Python工程师标准>>> 看到百威啤酒的客户端主界面的按钮,感觉比较新奇,先看下图片: 注意图中我画的箭头,当时鼠标点击的黑色圈圈的位置,然后按钮出现了 ...

  4. Android 播放mp3 tag乱码分析之java 篇

    在Java程序中的字符,不管是中文的还是英文的,都是占用二个字节,这个结论我们大家都烂熟于心了,但是纠结是为什么呢?     其实是因为 char 类型 就好比双字节 的无符号整数   .   UTF ...

  5. android:gravity=“bottom|center_horizontal“的妙用

    今天,在java SE课堂上,老师讲逻辑或"|"表示:左侧条件成立,也会继续执行右侧条件.例如: int x=5; if((x>1)|(x/0==1)){ //即使左侧的x& ...

  6. iptables 在 Android 抓包中的妙用

    本文介绍一种在 Andorid 中实现单应用.全局.优雅的抓包方法. 此文于去年端午节编写,由于种种原因,当时藏拙并未发布.现删除一些敏感信息后分享出来,希望对各位有所启发. 背景 昨天在测试一个 A ...

  7. com.android.ut是什么文件,妙用UT数据文件夹%AppData%\uTorrent

    tray.ico 这是一个标准的 Windows 图标文件.如果 %AppData%\uTorrent 中存在 tray.ico,则该图标文件将替换系统托盘(位于屏幕右下角)中的默认图标. main. ...

  8. 从零搭建一个自动化运维体系

    作者简介: 胥峰,著有畅销书<Linux运维最佳实践>.译著<DevOps:软件架构师行动指南>,资深运维专家,有 11 年运维经验,在业界颇具威望和影响力.2006 年毕业于 ...

  9. Android Drawable 详解(教你画画!)

    参考 1.Android中的Drawable基础与自定义Drawable 2.android中的drawable资源 3.Android开发之Shape详细解读 Drawable分类 No xml标签 ...

最新文章

  1. 超硬核全套Java视频教程(学习路线+免费视频+配套资料)
  2. linux 下如何安装php,详解在Linux下如何安装配置PHP
  3. oracle缩减临时表空间,oracle的临时表空间写满磁盘空间解决改问题的步骤
  4. 团队成员之间的对抗与互助的鼓励
  5. Nand Flash Yaffs系统大量写入数据失败问题的解决方法。
  6. git 操作二进制文件
  7. 华为交换机S3700端口基本配置
  8. 如何高效地存储与检索大规模的图谱数据?
  9. CentOS7:搭建SVN + Apache 服务器
  10. FGMap学习之--快速入门
  11. 世界地图可以无限放大_国外测评 | 老蛙百微镜头的全方位解析,2倍放大倍率的优质表现!...
  12. 2018全球50大最佳发明名单
  13. Windbg分析蓝屏Dump文件
  14. 交流电压电流采样基础知识
  15. Elsevier论文模板没有author biography的解决办法
  16. 省钱兄霸王餐源码uniapp前端
  17. 没想到你们是这样的女生……
  18. uni-app如何获取位置信息(经纬度)
  19. HDU2072单词数
  20. 成都榆熙电子商务有限公司:拼多多商家如何剖析用户数据?

热门文章

  1. 千牛卖家工作平台使用教程
  2. SpringBoot 整合activiti5.22 实现一个完整的请假流程
  3. 小计合计总计表格_总计总计重复的Excel小计
  4. 自己编程实现抖音特效(Python)
  5. 在mips64架构的国产系统中安装pyinstaller
  6. 微信小程序--picke选择器(省市区城市)-- 使用taro开发
  7. 【RISC-V】SiFive Unmatched开发板开发手记02
  8. node mysql timeout_Error: Handshake inactivity timeout in Node.js MYSQL module
  9. 使用脚本配置odbc mysql_LoadRunner利用ODBC编写MySql脚本
  10. 快看!RobotArt如何降服四轴机器人?