我刚刚为那些被 findViewById 困惑的人写了一个答案,我意识到我的理解存在差距。这个问题只是出于知识和好奇心。
考虑一下:
button = (Button)findViewById(R.id.button);
findViewById
返回一个实例View
,然后将其转换为目标类。到目前为止一切都很好。
要设置视图,findViewById
构造一个AttributeSet
来自传递给构造函数的关联 XML 声明中的参数View
.
然后我们投射View
实例到Button
.
如何AttributeSet
依次传递给Button
构造函数?
[EDIT]
所以我是一个困惑的人:)。重点是,当布局膨胀时,视图层次结构已经包含视图后代类的实例。 findViewById 只是返回对其的引用。当你想到这一点时就很明显了 - 哦..
findViewById
什么也没做。它只是查看视图层次结构并返回对请求的视图的引用viewId
. View
已经创建并存在。如果你不打电话findViewById
对于某些观点来说,没有任何改变。
视图被夸大了LayoutInflator
。你打电话时setContentView
解析 xml 布局并创建视图层次结构。
属性传递给 Button 的构造函数LayoutInflater
. check 布局充气器源代码 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/view/LayoutInflater.java#LayoutInflater.inflate%28org.xmlpull.v1.XmlPullParser,android.view.ViewGroup,boolean%29.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)