Android关于控件中setTag的相关问题

关于setTag这个方法,想必大家已经很熟悉了。

我们都知道setTag是View的一个方法,是用来给空间添加一些额外信息的,我们来看一下官方的解释:

Android关于控件中setTag的相关问题_第1张图片
大致的意思:给相关的view设置一个tag,这个tag可以用来标记这个view,在view中tag也可以被用来存储数据而不需要用其他的数据结果,比如sharedPreferenced等等。而图中mTag只是一个Object对象。

而当我们去看view的源码时,你还会看到setTag的重载,setTag(int key, final Object  tag);

从参数上可以看出来,我们可以添加多个数据,下面就让我们去看看源码:

Android关于控件中setTag的相关问题_第2张图片
从图中可以看出,和我们想的几乎差不多,但是要注意的是key要唯一,否则会报IllegalArgumentException这个异常,那我们应该怎样让他唯一不重复,从图中可以看出用应用的资源ID,这样就不会重复了。在图中还有setKeyedTag(key,tag)这个方法,其实不用看源码,我们也能猜到,是用来存储tag的,那就让我们来看看他的代码:
Android关于控件中setTag的相关问题_第3张图片
首先,mKeyedTags是SparseArray的实例,是用来存储view 的Tag的,至于SparseArray是什么,自己去看源码,其实也很简单,里面无非就定义了两个数组,一个用来存储key值的,一个用来存储tag的,所以看源码的时候不要怕。

通过上面的分析,我们已经知道setTag中的数据怎么存储了,存储在哪里了,下面我们再看看怎么获取tag:

Android关于控件中setTag的相关问题_第4张图片
Android关于控件中setTag的相关问题_第5张图片
上面两张图中的方法也很好理解,大家看一下就行,这里就不解释了。


如果有什么解释的不对的地方,请指出,谢谢!

你可能感兴趣的:(Android关于控件中setTag的相关问题)