美文网首页
RecyclerView中item布局显示问题

RecyclerView中item布局显示问题

作者: pioneerz | 来源:发表于2018-03-13 22:46 被阅读1397次

    今天在做一个demo的时候,遇到两个bug,特此记录一下。

    1.item布局显示不正确

    UI.jpg 界面很简单,一个recyclerView,一个button,点击button往数据库里添加一条数据,然后recyclerview展示出来,但是今天遇到了怎么设置item 的布局的大小,item都没有效果,挤在一起,就想这样的 error.jpg 但是布局已经设置了3等份 代码.png 结果就是没有效果,找了好长时间,最后发现是因为子布局和容器的原因 代码.png

    我们可以看到,我使用了LayoutInflater.from(mContext).inflate(R.layout.order_item,null)这种方式加载子布局,我换成LayoutInflater.from(mContext).inflate(R.layout.order_item,parent,false)这种形式布局显示就正常了,这是为什么呢?首先让我们来看看inflate源码是怎么解释这些参数的?

    屏幕快照 2018-03-13 下午9.56.27.png 屏幕快照 2018-03-13 下午9.57.01.png

    从图中我们可以看到,不管外部是调用两个参数的还是调用三个参数的,最终都是调用三个参数的,所以我们直接用带有三个参数的方法来分析。
    从源码的注释里我们知道:这个方法是用来加载布局的,如果出错,则抛出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”,这真的是无语了,害得我找了好长时间。。。

    相关文章

      网友评论

          本文标题:RecyclerView中item布局显示问题

          本文链接:https://www.haomeiwen.com/subject/ckitqftx.html