CoordinatorLayout 嵌套Recyclerview
CoordinatorLayout 嵌套Recyclerview再嵌套Recyclerview
问题:使用CoordinatorLayout+AppBarLayout+TabLayout+ViewPager+RecyclerView嵌套RecyclerView实现吸附悬停的效果,当初步完成功能的时候我发现RecyclerView嵌套RecyclerView的布局有时候会出现没有跟随顶部的布局一起滑动而是可以自己滑动的现象,而且有时候滑动的时候还会出现卡顿的现象。于是我花了一天的时间找原因,最后才发现我这边的场景跟别人写的demo有个区别:别人的demo只有一个RecyclerView,而我的需求则用到了RecyclerView嵌套RecyclerView。于是我把自己的项目改成一个RecyclerView,果然不会出现这样的问题,原来是这个原因。最终的解决办法:
解决方式:为最子层的RecyclerView增加一句setNestedScrollingEnabled(false)
或者在最子层的RecyclerView的xml中添加:
android:nestedScrollingEnabled="false"
CoordinatorLayout实现了NestedScrollingParent,纵向RecyclerView是CoordinatorLayout的子View,RecyclerView的滑动能通知到CoordinatorLayout,继而由CoordinatorLayout协调让CollapsingToolbarLayout发生折叠。
上面出bug的原因也能理解了,横向RecyclerView的父View是纵向RecyclerView,而RecyclerView只实现了NestedScrollingChild,无法像CoordinatorLayout一样响应。所以要关闭横向RecyclerView的嵌套滑动功能,让横向RecyclerView如同其他嵌入纵向RecyclerView的view一样,触发折叠。