关于LayoutInflater.inflate()

不少人都会对这个函数的第三个参数不太理解,下面记录一下解释

 

其实第三个参数boolean attachToRoot的意思是,是否把选取的视图添加到root中,在单纯的调用

例如把某个viewgroup的内部结构用某个layout.xml文件指定的。

 ViewGroup v = (ViewGroupfindViewById(R.id.ffff);
 View vv = LayoutInflater.from(this).inflate(R.layout.ffffvfalse);
 v.addView(vv);
这个时候若是把第三个参数设置成false,那么在你的viewgroup中就得不到任何东西,因为没自动添加进去。
设置成true则是自动把xml文件中的构造添加到root中。
 
但是使用LayoutInflater.inflate()的地方不仅仅是这个,在ExpandableListAdapter中的getGroup或者getChildView的函数重写时就要用一个layout.xml来对应一个item项。
这个时候如果converView = inflater.inflate(R.layout.xxx, parent, true);那么你获得的就是一个exception,为啥呢,我估摸着是在父类getChildView、getGroup这些函数中已经进行了parent.add(converView),因此若设置成true,则重复了这个操作,因此抛出异常。
 
converView = inflater.inflate(R.layout.xxx, parent, false);//执行正确
 
不知道这个解释是否正确,求大神指点。

猜你喜欢

转载自cb269267.iteye.com/blog/1779661
今日推荐