Android 不得不知 之 Tag 妙用

setTag () 是 Android 的 View 類中頗有用的一個方法,能夠用它來給控件附加一些信息,在不少場合下都獲得妙用。咱們能夠看到 setTat() 有兩個方法重載,setTag(Object object)setTag(int key,Object object)參數類型 都帶有 Object 也就是 能夠保存任何 對象數據。
下面分別介紹下相關使用方法。java


void setTag(Object tag)

這個方法相對簡單,若是隻須要設置一個 tag,那麼直接調用 setTag(Object tag) 取值:view.getTag();方法就能夠輕鬆搞定。android

void setTag (int key, Object tag)

官方的api文檔中提到: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.」app

因此拋出 IllegalArgumentException 的緣由就在於 key 不惟一,那麼如何保證這種惟一性呢?很明顯定義一個 final 類型的 int 變量和硬編碼一個值的方式都是行不通的。好比下面一個錯誤的例子:ide

 

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 值的惟一性。spa

取值

 

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

就能取到值了!code



做者:老林不跌面兒
連接:https://www.jianshu.com/p/2df2675b516d
來源:簡書
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。xml

相關文章
相關標籤/搜索