android-recyclerview - 在recyclerview上方滚动viewpager标题不起作用
问题描述
我尝试了两种方法来滚动 recyclerView 上方的 viewpager 标题。布局的 idandroid:id="@+id/rel_promotions_parent"
与要滚动的 viewPager 一起。
- 使用 CoordinatorLayout,其中 viewpager 根布局具有
app:layout_scrollFlags="scroll|exitUntilCollapsed"
和 recyclerView 具有app:layout_behavior="@string/appbar_scrolling_view_behavior"
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white_one"
android:fitsSystemWindows="true"
>
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
>
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
>
<RelativeLayout
android:id="@+id/rel_promotions_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
>
<com.loopingviewpager.LoopingViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="visible"
app:autoScroll="true"
app:isInfinite="true"
app:scrollInterval="2000"
/>
<com.loopingviewpager.indicator.CustomShapePagerIndicator
android:id="@+id/indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/viewpager"
android:layout_centerHorizontal="true"
android:layout_marginBottom="@dimen/_5sdp"
android:visibility="visible"
app:indicator_spacing="4dp"
/>
</RelativeLayout>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
android:clipToPadding="false"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:paddingBottom="10dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
- 在链接https://medium.com/@alex.gabor中使用 motionLayout 作为示例,将约束集应用于布局
android:id="@+id/rel_promotions_parent"
<RelativeLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white_one"
>
<androidx.constraintlayout.motion.widget.MotionLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/scrollable_header_above_recycler_view_scene"
>
<RelativeLayout
android:id="@+id/rel_promotions_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
>
<com.loopingviewpager.LoopingViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="visible"
app:autoScroll="true"
app:isInfinite="true"
app:scrollInterval="2000"
/>
<com.loopingviewpager.indicator.CustomShapePagerIndicator
android:id="@+id/indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/viewpager"
android:layout_centerHorizontal="true"
android:layout_marginBottom="@dimen/_5sdp"
android:visibility="visible"
app:indicator_spacing="4dp"
/>
</RelativeLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="5dp"
android:clipToPadding="false"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:paddingBottom="10dp"
app:layout_constraintTop_toBottomOf="@id/rel_promotions_parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</androidx.constraintlayout.motion.widget.MotionLayout>
</RelativeLayout>
在这两种情况下,只有 recyclerView 正在滚动,而 viewPager 则静止不动。如果我们尝试触摸并拖动 viewpager,它会滚动,但不是在 recyclerView 的帮助下。
有谁知道如何在 recyclerView.. 上方滚动 viewpager 标题?
解决方案
当 recyclerView 放置在其中时,NestedScrollView 无法捕捉到滚动变化。因此,虽然实现了分页,但分配了大量内存空间并且滚动非常滞后。我所做的解决方案是将recyclerView中的标题合并为第一个元素,然后删除nestedsrollview。我还为 recyclerview 实现了 diffUtil 类回调,这也为我做了很多工作。
希望它对任何人都有帮助。
推荐阅读
- python - 我的 Floyd-Steinberg 抖动实现有什么问题?
- feathersjs - feathersJS 自定义身份验证
- sql - 在 SQL 中选择除某些 Data_Type(例如图像)之外的所有列
- javascript - 在 Mapview Marker 标题上反应原生 onPress 事件?
- c++ - Win32 API 打开新窗口
- join - Lead Lag 函数在 Teradata 15.0 上不起作用。任何可以给我类似结果的替代方法
- python - 无法卸载Tensorflow 2.1.0 因为conda 找不到包和解决环境失败
- r - py_call_impl(callable, dots$args, dots$keywords) 中的错误:ValueError:在用户代码中:
- database - MongoDb 根据动态键获取记录
- javascript - 没有错误显示,但 Chrome.Storage.Sync。Get 没有收到我在 Chrome.Storage.Sync.Set 中设置的内容