记一个比较奇葩的bug

picture.png

问题描述:
首先我的布局是这样的,在NestedScrollView里面存在三个RecyclerView,然后使用折叠布局后,滑动上面的两个RecyclerView顶部不会折叠。

解决办法:


image.png

为不可折叠区域的RecyclerView设置 setNestedScrollingEnabled(false);

问题分析:
在事件分发模型中,手指down、move、up整个滑动过程,一旦有View决定拦截这个事件,那么整个事件过程都交由它来处理,其他View没有机会再处理了。

新的嵌套滑动机制增加支持子View和父View共同处理滑动事件的能力,子View处理事件的时候,能通知父View同时处理。

CoordinatorLayout实现了NestedScrollingParent,纵向RecyclerView是CoordinatorLayout的子View,RecyclerView的滑动能通知到CoordinatorLayout,继而由CoordinatorLayout协调让CollapsingToolbarLayout发生折叠。

上面出bug的原因也能理解了,横向RecyclerView的父View是纵向NestedScrollView,而NestedScrollView只实现了NestedScrollingChild,无法像CoordinatorLayout一样响应。所以要关闭横向RecyclerView的嵌套滑动功能,让横向RecyclerView如同其他嵌入NestedScrollView的view一样,触发折叠。

你可能感兴趣的:(记一个比较奇葩的bug)