HorizontalScrollView 内的 RecyclerView 未显示所有项目

问题描述 投票:0回答:4

我的

RecyclerView
里面有一个
HorizontalScrollView
。我看不到里面
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>
android android-recyclerview horizontalscrollview
4个回答
36
投票

使

HorizontalScrollView
的子代成为
RelativeLayout
而不是
LinearLayout


13
投票

我也刚刚遇到了这个问题,接受的答案很有帮助。我有:

<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
等等。在
RelativeLayout
HorizontalScrollView
之间添加
RecyclerView
修复了它,以便它显示所有内容项目是否适合设备的宽度,您可以滚动找到它们。

 <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
是关键。


0
投票

onBindViewHolder
仅针对“屏幕上可见”的项目调用。如果总项目是 7 并且屏幕只能显示 4,那么一切都可以。

因此得名“RecycleView”,它回收可见的视图,你的

RecycleView

中总共只有4个视图

这个我不明白你的意思!?

我使用 HorizontalScrollView 因为我需要滚动列表 来自回收站的背景,而不是回收站内的背景,它通常是如何工作的。

所以,我需要一个解决方案来滚动带有背景的列表 列表,或使用 HorizontalScrollView 显示所有项目


0
投票

只需使用此格式即可。我希望它能解决你的问题。

  <HorizontalScrollView
    android:layout_below="@id/ss"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/demorecview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </RelativeLayout>


</HorizontalScrollView>
© www.soinside.com 2019 - 2024. All rights reserved.