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。