嵌套的 RecyclerView 滚动无法向下滚动 ViewPager2 的 BottomSheetBehavior
Posted
技术标签:
【中文标题】嵌套的 RecyclerView 滚动无法向下滚动 ViewPager2 的 BottomSheetBehavior【英文标题】:BottomSheetBehavior with ViewPager2 can't be scrolled down by nested RecyclerView scroll 【发布时间】:2020-08-11 09:14:04 【问题描述】:我有一个类似于BottomSheetBehavior 的视图,这个视图内部有ViewPager2。每个 ViewPager2 的页面都是一个垂直的 RecyclerView。问题是当当前垂直 RecyclerView(它是 ViewPager 的页面)不能再垂直滚动时,BottomSheet 不会向下滚动。当我只有一个垂直 RecyclerView 而不是 ViePager 时,一切工作文件。
临时解决方案是用 NestedScrollView 包装 ViewPager,但它的性能很糟糕,并且有它自己的错误。
原来的布局:
<?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_
android:layout_
android:background="#C7C7C7"
tools:context=".MainActivity">
<LinearLayout
android:id="@+id/bottom_sheet"
android:layout_
android:layout_
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_
android:layout_
android:layout_gravity="center_horizontal"
app:tabGravity="center"
app:tabMode="scrollable" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager"
android:layout_
android:layout_ />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
[这是它的外观(对于 gif 质量感到抱歉)]
【问题讨论】:
【参考方案1】:我已经为这种情况找到了解决方案,我为内部 RecyclerView 设置了isNestedScrollingEnabled = false
,以便 BottomSheetBehavior 找到另一个滚动视图
viewPager.children.find it is RecyclerView ?.let
(it as RecyclerView).isNestedScrollingEnabled = false
【讨论】:
谢谢,它有效!不幸的是,还出现了其他错误:当打开底部工作表并滑动到下一页时,该页面中的 recyclerview 变得不可滚动,直到我将底部工作表向下移动至少几个像素【参考方案2】:BottomSheetBehaviour 仅检测第一个可滚动视图。因此,始终建议在其中只使用一个可滚动视图。
欲了解更多信息,请查看此答案bottomsheetbehavior-with-two-recyclerview
这个也是Scroll not working for multiple RecyclerView in BottomSheet
如果你真的想要两个可滚动的视图,我建议你也看看这个库AndroidSlidingUpPanel
【讨论】:
非常感谢您的回复,这对我的研究很有帮助。我为我的案例找到了另一种解决方法:我在 ViewPager 中为内部 RecyclerView 设置了isNestedScrollingEnabled = false
,以便 BottomSheetBehavior 找到另一个滚动视图。以上是关于嵌套的 RecyclerView 滚动无法向下滚动 ViewPager2 的 BottomSheetBehavior的主要内容,如果未能解决你的问题,请参考以下文章
向下滚动然后再次向上滚动后,recyclerview 项目之间出现间隙。请看详情
无法滚动到 NestedScrollView 内的 RecyclerView 中的项目
NestedScrollViewLayout 内的 SwipeRefreshLayout 内的 RecyclerView 无法滚动