原因分析:
setTag是android的view类中很有用的一个方法,可以用它来给空间附加一些信息,在很多场合下都得到妙用。
setTag(Object tag)方法比较简单,这里主要谈一谈带两个参数的setTag方法。
官方的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](file:///E:/%E5%AD%A6%E4%B9%A0/%E6%AD%A6%E6%B1%89%E5%A4%A7%E5%AD%A62010%E5%B9%B4%E5%A4%A7%E5%AD%A6%E7%94%9F%E7%A7%91%E7%A0%94%E9%A1%B9%E7%9B%AE/android-sdk-windows/docs/guide/topics/resources/more-resources.html#Id")). Keys identified as belonging to the Android framework or not associated with any package will cause an [IllegalArgumentException](file:///E:/%E5%AD%A6%E4%B9%A0/%E6%AD%A6%E6%B1%89%E5%A4%A7%E5%AD%A62010%E5%B9%B4%E5%A4%A7%E5%AD%A6%E7%94%9F%E7%A7%91%E7%A0%94%E9%A1%B9%E7%9B%AE/android-sdk-windows/docs/reference/java/lang/IllegalArgumentException.html)
to be thrown.”
所以抛出[IllegalArgumentException](file:///E:/%E5%AD%A6%E4%B9%A0/%E6%AD%A6%E6%B1%89%E5%A4%A7%E5%AD%A62010%E5%B9%B4%E5%A4%A7%E5%AD%A6%E7%94%9F%E7%A7%91%E7%A0%94%E9%A1%B9%E7%9B%AE/android-sdk-windows/docs/reference/java/lang/IllegalArgumentException.html)的原因就在于key不唯一,那么如何保证这种唯一性呢?定义一个final类型的int变量和硬编码一个值的方式都是行不通的。
如果只需要设置一个tag,那么直接调用setTag(Object tag)方法就可以轻松搞定,如果一定需要使用多个tag绑定,那么需要先在res/values/ids.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");
就可以了