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

关于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:

上面两张图中的方法也很好理解,大家看一下就行,这里就不解释了。


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容