我刚刚为一个被findViewById所迷惑的人写了一个答案,我意识到我的理解存在差距。这个问题仅是出于知识和好奇心。
考虑一下:
button = (Button)findViewById(R.id.button);
findViewById
返回View
的实例,然后将其强制转换为目标类。到目前为止一切都很好。要设置 View ,
findViewById
根据关联的XML声明中的参数构造一个AttributeSet
,并将其传递给View
的构造函数。然后,我们将
View
实例转换为Button
。AttributeSet
如何依次传递给Button
构造函数?[编辑]
所以我是一个困惑的人:)。重点是,当布局膨胀时, View 层次结构已包含 View 后代类的实例。 findViewById只是返回对其的引用。当您考虑时很明显-Doh ..
最佳答案
findViewById
不执行任何操作。它只是浏览 View 层次结构,并返回对带有请求viewId
的 View 的引用。 View
已经创建并存在。如果您不为某些 View 调用findViewById
,则没有任何变化。
View 由LayoutInflator
夸大。当您调用setContentView
时,将解析xml布局并创建 View 层次结构。
通过LayoutInflater
传递给Button的构造函数的属性。检查LayoutInflator source code。
关于android - findViewById如何初始化 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14801008/