gpt4 book ai didi

android-fragments - 带有 RecyclerView 滚动问题的垂直 ViewPager2

转载 作者:行者123 更新时间:2023-12-03 09:54:22 24 4
gpt4 key购买 nike

我正在使用带有两个垂直方向的片段的 ViewPager2。当用户向下滑动到第二个片段时,有一个 RecyclerView 在同一垂直方向滚动内容。

问题是 ,当我滚动 RecyclerView 的内容时,有时 ViewPager2 捕获滚动事件,有时 RecyclerView 捕获滚动事件。

我想要 以便当用户滚动到 RecyclerView 的顶部时,ViewPager 仅在用户到达 RecyclerView 内容的顶部时才滑回第一个片段。

我试过使用 recyclerView.isNestedScrollingEnabled = false 没有多少运气。我也尝试将 RecyclerView 放入 NestedScrollView,但不推荐这样做,因为 RecyclerView 然后创建它需要的数据集的每个 ViewHolder,这显然效率不高。

最佳答案

所以......我能够通过阅读一些documentation 😅来弄清楚。我将在此处发布答案,以帮助其他遇到类似问题的人:

由于 ViewPager2 不支持嵌套滚动 View ,与 NestedScrollView 不同,我们需要在布局中使用自定义包装器包装嵌套滚动 View ,以便能够处理被嵌套滚动 View 父级拦截的触摸和滑动事件。在我们的例子中,子元素是 RecyclerView,父元素是 ViewPager2。

您可以找到包装类 here 。只需将它添加到您的项目中,然后将您的可滚动 View 包装在其中,类似于以下内容:

    <NestedScrollableHost
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" />

</NestedScrollableHost>

这里有几件事需要注意: documentation 说这个解决方案不适用于 ViewPager 中其他可滚动 View 中的可滚动 View 。此解决方案仅适用于 ViewPager 的即时滚动 View 。

另一个注意事项是包装类使用 requestDisallowInterceptTouchEvent() 来确保子可滚动 View 告诉父 View 在子需要滚动时不要滚动。

关于android-fragments - 带有 RecyclerView 滚动问题的垂直 ViewPager2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60640368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com