今天在做一个demo的时候,遇到两个bug,特此记录一下。
1.item布局显示不正确
我们可以看到,我使用了LayoutInflater.from(mContext).inflate(R.layout.order_item,null)这种方式加载子布局,我换成LayoutInflater.from(mContext).inflate(R.layout.order_item,parent,false)这种形式布局显示就正常了,这是为什么呢?首先让我们来看看inflate源码是怎么解释这些参数的?
从图中我们可以看到,不管外部是调用两个参数的还是调用三个参数的,最终都是调用三个参数的,所以我们直接用带有三个参数的方法来分析。
从源码的注释里我们知道:这个方法是用来加载布局的,如果出错,则抛出InflateException异常;
resource:xml资源对应的资源ID,即我们的子item布局。
root:根布局或者父布局,如果attachToRoot为true的话,他会将子布局添加进这个root里面,否则的话仅仅是将root对象的LayoutParams属性附加到resource资源的根布局对象上,这里一定要注意的是如果传入的root为null的话,将不存在root对象也就没有LayoutParams等相关的属性,所以在resource里面设置的属性将不会起作用
attachRoot:这个值表明resource是否要加载到root上面
而且我们也知道布局的layout_XXX属性都是相对于父布局来说的,所以当传入的root为null时,很多的属性将会失效。
2.只显示一行数据
当我把第一个问题修正了之后,运行了一下,结果又遇到第二个问题:只能显示一行。这个问题相对简单多了,网上一搜一大把,有说是scrollView中嵌套recyclerView,有说是刚才root出现的问题,反正很多,请看这里,而我的则是因为自己的子布局中设置layout_height=“match_parent”,这真的是无语了,害得我找了好长时间。。。