项目中较少使用RecycleView,更多的使用ListView。原因无它,唯手熟而。
当使用recycleview时,遇到了新手应该常见的一个问题:只显示一行。
当前Holder的构造方法
public BaseHolder(ViewGroup parent, @LayoutRes int res) {
super(LayoutInflater.from(parent.getContext()).inflate(res, parent, false));
}
解决方法:
检查布局文件,RecycleView中自定义布局的layout_height不能设置为match_parent,同时layout中任一item的高度均不能是match_parent。高度改为wrap_content,问题解决。
可能的原因:如果inflate时,传入的parent不为空,且attachToRoot为false,此时自定义布局中的属性生效;如果自定义view的高度为match_parent,导致后续view不能显示。
具体原因需要参考RecycleView的源码。可参考文章:
http://blog.csdn.net/guolin_blog/article/details/12921889 [Android LayoutInflater原理分析,带你一步步深入了解View(一)]
- 如果root为null,attachToRoot将失去作用,设置任何值都没有意义。
- 如果root不为null,attachToRoot设为true,则会给加载的布局文件的指定一个父布局,即root。
- 如果root不为null,attachToRoot设为false,则会将布局文件最外层的所有layout属性进行设置,当该view被添加到父view当中时,这些layout属性会自动生效。
- 在不设置attachToRoot参数的情况下,如果root不为null,attachToRoot参数默认为true。
参考:http://blog.csdn.net/overseasandroid/article/details/51840819 RecyclerView中的item的match_parent属性失效问题解决方案。
参考:http://blog.csdn.net/fantasiasango/article/details/52188064
网友评论