LayoutInflater
常用的两个方法:
1 | public View inflate(int resource, ViewGroup root) |
第一个方法的调用如下:
1 | public View inflate(int resource, ViewGroup root) { |
而在其实现中,第二个参数 ViewGroup
类型的 root
是否为空,会决定在从布局文件创建 View
的时候,是否生成根元素的布局参数(即以 layout_
开头的属性),关键代码如下:
1 | ViewGroup.LayoutParams params = null; |
也就是当其为空时,那么所创建的 View
的布局参数也为空,这样就可能类似于导致在布局定义时对根元素明明定义了 match_parent
的值但是显示出来的却是 wrap_content
的问题。
而最后的 boolean
参数则是当 root
参数不为空时,是否添加到 root
中。
1 | if (root != null && attachToRoot) { |
在 Adapter 或 Fragment
的创建中,一般传 false
即可,因为 fragment 或 adapter 会自己添加到对应的容器中,如果传 true
添加了的话,反而会导致报错提示 view 已经有了 parent。
另外,当 root
为空或者 attachToRoot
参数为 false
时,返回的是所创建的 view,否则返回的是 root
。