set/getId()和set/getTag()之间的区别是什么?

4
我知道,setId()接受int参数,而setTag()接受Object参数是它们之间的主要区别,但我更想了解实际建议。
当我通过编程方式生成更多相同的元素时,我通过setId(++counter)设置它们的ID,这对于我来说很好,因为我知道哪个元素发送了onClick事件。我也可以通过setTag(++counter)做同样的事情,但我习惯于之前的方法。
那么,我何时应该使用setTag(),使用setId()是否有错误?如果我的做法正确,那么我会在需要传递附加数据时使用setTag(),但我先留下您的评论。

查看这个主题:https://dev59.com/vm435IYBdhLWcg3wpx2x - Martin Vandzura
重复问题: https://dev59.com/JWkw5IYBdhLWcg3wn8CO - Lawrence Gimenez
@vandzi 看到了。这让我发出了这个问题。谢谢。 - sandalone
@userIsAMonkey 不算是重复问题,但那个链接很棒,尤其是第二个答案。 - sandalone
2个回答

4
你的猜测是正确的。当你只需要在代码中识别特定的视图时,应使用 setId() 方法;而当你想要传递与该 View 相关的其他信息(这些额外的数据可能或可能不唯一地标识该 View)时,则应使用 setTag 方法。 你可以仅使用 setTag 方法并传递一个包含 id + 额外数据的复合对象,但在这种情况下,你需要构建一个特殊对象来代替更简单的方法,即调用上述两个方法。 编辑: View 类的文档还包含有关这两个方法的宝贵信息: IDs

视图可能带有与之相关联的整数 ID。这些 ID 通常在布局 XML 文件中分配,并用于在视图树中查找特定视图。

Tags

与 ID 不同,标签不用于标识视图。标签本质上是可与视图关联的额外信息。它们通常用作便利方式,将与视图相关的数据存储在视图本身中,而不是通过将它们放在单独的结构中。


1

ID 是通常唯一的整数类型属性,您可以分配给任何视图,以便在将来识别它们。

TAGObject类型的属性,用于分配其他数据(可能是您自己的对象),不同的对象可能携带类似的标记。

因此,如果您只想唯一标识您的视图,应该使用id(因为它是原始数据类型,并且将消耗少量内存),而如果您希望您的对象还携带其他信息,请使用TAG。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接