整个开发者documents& tutorials,他们建议使用findViewById()
“查找由onCreate(Bundle)中处理的XML中的id属性标识的视图”,所以我专门在任何地方使用它查看引用xml文件中的内容。这导致了许多问题,比如我需要在静态方法中使用视图,或者据我所知,除onCreate
之外的任何方法。最近我偶然发现setId()
,除了更简洁的写作和更具可读性,因为它遵循标准的“getters& setters”协议,似乎也没有要求你在哪里使用它应用
实际上是什么区别:
setId - “设置此视图的标识符。在此视图的层次结构中,标识符不必是唯一的。标识符应为正数。”
&安培;
findViewById - “查找具有给定id的子视图。如果此视图具有给定的id,则返回此视图。”
他们可以互换吗?是否有允许使用其中一种的情况?
答案 0 :(得分:1)
使用findViewById尝试查找已经“命名”的视图,并且需要在夸大布局后执行某些操作。
使用setId为视图设置名称(例如,以编程方式创建),以便将来能够通过findViewById找到此视图。
你不仅可以在onCreate上使用findViewById。每个ViewGroul都允许您通过ID找到他们的孩子。
答案 1 :(得分:1)
这些是完全不同的方法。实际上,setId
对于设置视图的ID非常有用,以便您以后可以使用findViewById
再次查找它。当您知道视图的ID时,可以使用findViewById
,并且希望获得与该ID关联的实际View
对象。如果已有setId
对象,则使用View
,并且要为其设置标识符,以便稍后使用{{1}再次找到相同的View
对象}。