HorizontalScrollView 内的 RecyclerView 未显示所有项目
RecyclerView inside HorizontalScrollView not showing all items
我在 HorizontalScrollView
里面有一个 RecyclerView
。我没有在 RecyclerView
中看到所有项目。我看过,即使适配器中的列表有 7 个项目,onBindViewHolder
也只被调用了 4 次!如果我取出 HorizontalScrollView
,它就可以正常工作。
我使用 HorizontalScrollView
因为我需要在回收背景下滚动列表,而不是在回收内部,它通常是如何工作的。
所以,我需要一个解决方案来滚动带有列表背景的列表,或者使用 HorizontalScrollView
显示所有项目
更新:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="wrap_content"
android:paddingTop="20dp">
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:scrollbars="none"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/label">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/rlWrapper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/paddingStartView"
android:background="@drawable/bg_round_corner">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/optionsRv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintStart_toStartOf="parent" />
</RelativeLayout>
<View
android:id="@+id/paddingStartView"
android:layout_width="16dp"
android:layout_height="16dp" />
<View
android:id="@+id/paddingEndView"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_toEndOf="@id/rlWrapper" />
</RelativeLayout>
</HorizontalScrollView>
<TextView
android:id="@+id/label"
style="@style/FontLocalizedMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:textAllCaps="true"
android:textColor="#979797"
android:textSize="12sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Tempareature" />
</androidx.constraintlayout.widget.ConstraintLayout>
onBindViewHolder
仅针对 "visible on screen" 项调用。如果项目总数为7,而屏幕只能显示4,则一切正常。
因此得名"RecycleView",它回收可见视图,你的RecycleView
总共只有4个视图
这个我没看懂你的意思!?
I use the HorizontalScrollView because I need to scroll the list with
the background from recycle, not inside recycle, how it usually works.
So, I need a solution to scroll a list with the background of the
list, or to show all the items using HorizontalScrollView
将 HorizontalScrollView
的 child 设为 RelativeLayout
而不是 LinearLayout
我也 运行 对此感兴趣,接受的答案很有帮助。我有:
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="none"
android:fillViewport="true">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/dates_recycler"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</HorizontalScrollView>
并且它没有在水平方向的回收站视图中显示所有项目。它只显示适合设备视图宽度的足够项目,调用 onBindViewHolder
多次,等等。在 HorizontalScrollView
和 RecyclerView
之间添加一个 RelativeLayout
修复它,以便它显示所有项目,无论它们是否适合设备的宽度,并且您可以滚动以找到它们。
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="none"
android:fillViewport="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/dates_recycler"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</androidx.recyclerview.widget.RecyclerView>
</RelativeLayout>
</HorizontalScrollView>
我 认为 也将 android:layout_width="match_parent"
设置为 RelativeLayout
是关键。
我在 HorizontalScrollView
里面有一个 RecyclerView
。我没有在 RecyclerView
中看到所有项目。我看过,即使适配器中的列表有 7 个项目,onBindViewHolder
也只被调用了 4 次!如果我取出 HorizontalScrollView
,它就可以正常工作。
我使用 HorizontalScrollView
因为我需要在回收背景下滚动列表,而不是在回收内部,它通常是如何工作的。
所以,我需要一个解决方案来滚动带有列表背景的列表,或者使用 HorizontalScrollView
更新:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="wrap_content"
android:paddingTop="20dp">
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:scrollbars="none"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/label">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/rlWrapper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/paddingStartView"
android:background="@drawable/bg_round_corner">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/optionsRv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintStart_toStartOf="parent" />
</RelativeLayout>
<View
android:id="@+id/paddingStartView"
android:layout_width="16dp"
android:layout_height="16dp" />
<View
android:id="@+id/paddingEndView"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_toEndOf="@id/rlWrapper" />
</RelativeLayout>
</HorizontalScrollView>
<TextView
android:id="@+id/label"
style="@style/FontLocalizedMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:textAllCaps="true"
android:textColor="#979797"
android:textSize="12sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Tempareature" />
</androidx.constraintlayout.widget.ConstraintLayout>
onBindViewHolder
仅针对 "visible on screen" 项调用。如果项目总数为7,而屏幕只能显示4,则一切正常。
因此得名"RecycleView",它回收可见视图,你的RecycleView
这个我没看懂你的意思!?
I use the HorizontalScrollView because I need to scroll the list with the background from recycle, not inside recycle, how it usually works.
So, I need a solution to scroll a list with the background of the list, or to show all the items using HorizontalScrollView
将 HorizontalScrollView
的 child 设为 RelativeLayout
而不是 LinearLayout
我也 运行 对此感兴趣,接受的答案很有帮助。我有:
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="none"
android:fillViewport="true">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/dates_recycler"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</HorizontalScrollView>
并且它没有在水平方向的回收站视图中显示所有项目。它只显示适合设备视图宽度的足够项目,调用 onBindViewHolder
多次,等等。在 HorizontalScrollView
和 RecyclerView
之间添加一个 RelativeLayout
修复它,以便它显示所有项目,无论它们是否适合设备的宽度,并且您可以滚动以找到它们。
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="none"
android:fillViewport="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/dates_recycler"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</androidx.recyclerview.widget.RecyclerView>
</RelativeLayout>
</HorizontalScrollView>
我 认为 也将 android:layout_width="match_parent"
设置为 RelativeLayout
是关键。