在使用SlidingTabLayout 测试实现ViewPager页卡滑动效果时,出现一个bug,经过一番百度查询,发现问题是LayoutInflater.inflate()使用
就总结了一下inflate()的使用注意点。
inflate(int resource, ViewGroup root, boolean attachToRoot)
第一个参数 resource:布局文件的id;
第二个参数 root:可选参数,布局文件resource参数设置的参照物就是这个root,也就是说inflate方法会根据root的大小,将布局文件
resource参数转换成LayoutParam对象;
第三个参数官方解释:是否将source布局添加到root中;
如果 inflate(resource,root);
inflate里面把ViewGroup传进去了,因为每一个View只能有一个父view即parentView。当container不为空时,比如此fragment所待在的activity的
layout。而onCreateView中返回的view是给ViewPager使用的,所以就会出现这个view有两个parentView-即activity的layout和viewPager,所以会报出异常。
只要如下解决即可:
1,infalte的时候把ViewGroup参数设置为null,view的parentView是ViewPager,ViewPager的parentView是activity的layout。
2,infalte设置参数为false。
如果 inflate(resource, null);
就等同于忽略了XML中的layout_width,layout_height
如果 inflate(resource, root, true);
那就会根据root生成一个布局文件resource的LayoutParam对象,并将这个resource添加到root中