NestScrollView嵌套RecyclerView无法复用
2023-11-04 本文已影响0人
炸山哥
- 列表卡顿原因分析 :NestScrollView嵌套RecyclerView,破坏了RecyclerView的复用机制。
NestScrollView在measureChildWithMargins中将传送给子View的MeasuerSpec置为0(UNSPECIFIED),如下图:
![](https://img.haomeiwen.com/i3255301/4f19a53f8b05f53e.png)
所以在RecyclerView 中收到的heightSpec为0;
![](https://img.haomeiwen.com/i3255301/98d939f67c8326e6.png)
这就导致往下的skipMeasure为false,然后每次添加数据都会重新measure,而且会把RecycleView的复用机制,滚动出去的Item不会被回收缓存,这就造成了Item越多,measure过程越久而导致的卡顿甚至ANR;
![](https://img.haomeiwen.com/i3255301/124465d7ab2ae795.png)
解决方案:1.尽量不用NestScrollView嵌套无限列表;(数据少的可以用)
2.可以用RecyclerView添加header、foot的方式来减少嵌套结构
3.一定要嵌套滑动可以用ScrollView;