先说我的使用场景,类似高德地图底部抽屉列表,而且包含多个recycleView,需要根据不同情况显示其中一个recycleview。我这里是出现了recycleview无法滑动的问题
好的,直接上我的解决方案:
@Nullable
@VisibleForTesting
View findScrollingChild(View view) {
if (ViewCompat.isNestedScrollingEnabled(view)) {
return view;
}
if (view instanceof ViewGroup) {
ViewGroup group = (ViewGroup) view;
for (int i = 0, count = group.getChildCount(); i < count; i++) {
View scrollingChild = findScrollingChild(group.getChildAt(i));
if (scrollingChild != null && scrollingChild.isShown() && canScrollVertically(scrollingChild)) {
return scrollingChild;
}
}
}
return null;
}
private boolean canScrollVertically(View scrollingChild) {
return scrollingChild.canScrollVertically(-1) || scrollingChild.canScrollVertically(1);
}
主要就上面的代码。其实就是自定义一个Behavior,具体实现是直接复制系统BottomSheetBehavior的源码,然后修改findScrollingChild方法,让Behavior的滑动事件绑定到自己想要的滚动视图。
至于具体原理大家去看BottomSheetBehavior的源码解析吧~~~