提问者:小点点

嵌套RecyclerView scroll无法向下滚动带有ViewPager2的BottomSheetBehavior


我有一个视图,它的作用类似于BottomSheetBe的行为,这个视图里面有ViewPager2。每个ViewPager2的页面都是一个垂直的回收器视图。问题是,当当前的垂直回收器视图(这是ViewPenger的一个页面)不能再垂直滚动时,BOTOSheet不会向下滚动。当我只有一个垂直的回收器视图时,一切都正常工作。

临时解决方案是用NestedScrollView包装ViewPager,但它的性能很差,而且有自己的bug。

原始布局:

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.coordinatorlayout.widget.CoordinatorLayout  
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/core"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#C7C7C7"
        tools:context=".MainActivity">

        <LinearLayout
            android:id="@+id/bottom_sheet"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#FFFFFF"
            android:elevation="8dp"
            android:orientation="vertical"
            app:behavior_hideable="true"
            app:behavior_peekHeight="300dp"
            app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">

            <com.google.android.material.tabs.TabLayout
                android:id="@+id/tab_layout"
                android:layout_width="wrap_content"
                android:layout_height="24dp"
                android:layout_gravity="center_horizontal"
                app:tabGravity="center"
                app:tabMode="scrollable" />

            <androidx.viewpager2.widget.ViewPager2
                android:id="@+id/view_pager"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

        </LinearLayout>

    </androidx.coordinatorlayout.widget.CoordinatorLayout>

[下面是它的样子(抱歉gif质量)]


共2个答案

匿名用户

我已经找到了这种情况的解决方案,我为内部RecyclerView设置了isNestedScrollingEnabled=false,以便BottomSheetBehavior找到另一个滚动视图

viewPager.children.find { it is RecyclerView }?.let {
        (it as RecyclerView).isNestedScrollingEnabled = false
}

匿名用户

BottomSheetBehavior仅检测第一个可滚动视图。因此,始终建议在其中仅使用一个可滚动视图。

有关更多信息,请查看此答案底部表行为与两个回收器视图

这一个也滚动不工作的多个RecyclerView在底板

如果你真的想有两个可滚动的视图,我推荐你看看这个库和AndroidSlidingUpPanel