ListView用了很久了 recyclerView也出来很久了 老项目也该换换控件了 老项目用的ListView多布局 每次切换布局的时候一旦子控件需要重新measure 便会有卡顿的效果
一直以来是一块心病。
应用写了不少,基本都是首页用到了多布局。而且多布局还伴随着刷新和加载。大致大家用的最平常的实现方式无非那么几种
- listView或者recyclerView返回不同的itemType 从而inflate不同的View
- listView或者recyclerView添加很多个头布局监听是否滚动底部 (略笨)(recyclerView还是通过itemType)
- listView或者recyclerView外层嵌套一层scrollView或者nestedScrollView 屏蔽子控件的滑动,在ScrollView中半写死布局顺序,底部是无限大Listview 从而实现的加载刷新。
随着业务的扩展更新迭代,慢慢的就会发现这几种方式还是不够灵活。
这几种方式还是属于半写死的状态。后两个一旦首页的布局发生改变意味着写死的布局又要更改,无非第一种通过不同itemType返回布局样式够灵活。以前的项目我的确是这么写的,不过最近想要换成recyclerView
那么问题来了
recyclerView嵌套recyclerView怎么办?父布局是竖向的,子布局也是竖向的怎么办?
(虽说官方不推荐滑动控件进行嵌套,但是业务需要啊,产品经理不管你啊!!!)
recyclerView是不能绘制无穷大的啊。控制他的只能是layoutmanager
这里嵌套竖向的会有个问题,子recyclerView的空间会 显示不全, 子recyclerView是横向的完全没问题,不过竖向的就有问题了。原因还是没有measure字布局的高度,这里网上一般给出的解决方案是遍历 子recyclerView中每一个item的高度,进行累加,从而通过layoutpamars给子recyclerView赋值高度,让她显示全。
解决方法有了,但我还是感觉这个方法笨啊(说白了就是麻烦,性能也不好)
于是乎看看淘宝是怎么做的哔哩哔哩是怎么做的
上工具 hierarchyviewer
果然淘宝是用的RecyclerView 多布局的方式,但是细心的我发现
仔细看下面两张图
recyclerView中的两个Item 不同的布局方式,但同隶属于一个recyclerView
recyclerView控制item的无非是layoutmanager 想必大厂都重写了layoutmanager
这里推荐一个recyclerView 框架
Vlayout :https://github.com/alibaba/vlayout