以下是关于自定义适配器的理解:
1.getView()的ViewGrop parent的参数意义
parent是Item的view的view的父视图,也就是说适配器中封装的ViewGrop来盛放item
2.LayoutInflate.inflate()三个参数含义
LayoutInflate.inflate(int resourceId, ViewGroup root, boolean attachToRoot)三个参数含义:
首先明白下面知识点:
给控件所指定的layout_width和layout_height到底是什么意思?该属性的表示一个控件在容器中的大小,就是说这个控件必须在容器中,这个属性才有意义,否则无意义。
当:root == null,无论attachToRoot 是否ture还是false
ResourceId的根节点没有依赖的父布局(容器),所以width和height属性失效
当:root != null,如果attachToRoot = ture;
则将resourceId对应得布局加载到root中,并将root返回;resourceId中的width和height属性有效
当:root != null,如果attachToRoot = false;
则将resourceId对应的view设置容器为root,但是不添加到root中,resourceId中的width和height属性有效
3.View.inflate()和LayoutInfalter.from(context).inflate()的对比
View.inflate() 和 LayoutInfalter.from(context).inflate() 都能实现把xml布局文件转化为view对象,但是前者只是单单转化为view对象,而后者可以将转化完的view对象添加给其他容器。
举个例子:
在RecycleView的Adapter中使用View.inflate() 进行创建item布局会产生虽然xml文件布局是匹配父元素的,但是运行后却是包裹内容的效果。
而用LayoutInfalter.from(context).inflate() 加载item布局时可以在加载时把item布局添加到ViewGroup容器中,从而以ViewGroup为父元素来匹配。