setTag () 是 Android 的 View 类中很有用的一个方法,可以用它来给控件附加一些信息,在很多场合下都得到妙用。
所以抛出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();
From: http://blog.csdn.net/brokge/article/details/8536906