關于setTag這個方法,想必大家已經很熟悉了。
我們都知道setTag是View的一個方法,是用來給空間添加一些額外信息的,我們來看一下官方的解釋:
大致的意思:給相關的view設置一個tag,這個tag可以用來標記這個view,在view中tag也可以被用來存儲數據而不需要用其他的數據結果,比如sharedPreferenced等等。而圖中mTag只是一個Object對象。
而當我們去看view的源碼時,你還會看到setTag的重載,setTag(int key, final Object ?tag);
從參數上可以看出來,我們可以添加多個數據,下面就讓我們去看看源碼:
從圖中可以看出,和我們想的幾乎差不多,但是要注意的是key要唯一,否則會報IllegalArgumentException這個異常,那我們應該怎樣讓他唯一不重復,從圖中可以看出用應用的資源ID,這樣就不會重復了。在圖中還有setKeyedTag(key,tag)這個方法,其實不用看源碼,我們也能猜到,是用來存儲tag的,那就讓我們來看看他的代碼:
首先,mKeyedTags是SparseArray的實例,是用來存儲view 的Tag的,至于SparseArray是什么,自己去看源碼,其實也很簡單,里面無非就定義了兩個數組,一個用來存儲key值的,一個用來存儲tag的,所以看源碼的時候不要怕。
通過上面的分析,我們已經知道setTag中的數據怎么存儲了,存儲在哪里了,下面我們再看看怎么獲取tag:
上面兩張圖中的方法也很好理解,大家看一下就行,這里就不解釋了。
如果有什么解釋的不對的地方,請指出,謝謝!