在 kotlin 中,为什么我的 recyclerview 不滚动

in kotlin why is my recyclerview not scrolling

我是回收站视图的新手,刚开始使用 Room 数据库。我正在开发这个允许用户将记录输入 Room 数据库的应用程序。用户输入信息并存储。屏幕的顶部是数据输入,底部是显示记录的回收站视图。一切都很好,直到有足够的记录来填充可用 space。然后新记录就消失在屏幕下方。当用户尝试滚动时会出现动画,但项目不会移动。我试图通过添加填充使项目更大,奇怪的是现在有滚动,但只是滚动到之前显示的同一项目。

这是main.xml

<?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="match_parent"
                                                   android:padding="10dp"
                                                   tools:context=".MainActivity">

    <TextView
            android:id="@+id/tvNameLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Name"
            app:layout_constraintBottom_toBottomOf="@id/etName"
            app:layout_constraintTop_toTopOf="@+id/etName"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/etName"

    />

    <EditText
            android:id="@+id/etName"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:hint="Enter Name"
            android:layout_marginStart="16dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toEndOf="@+id/tvNameLabel"/>

    <TextView
            android:id="@+id/tvEmailLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Email Id"
            app:layout_constraintBottom_toBottomOf="@+id/etMailId"
            app:layout_constraintEnd_toStartOf="@+id/etMailId"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/etName"/>

    <EditText
            android:id="@+id/etMailId"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:hint="Enter Email Id"
            android:layout_marginStart="8dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/tvEmailLabel"
            app:layout_constraintTop_toBottomOf="@+id/etName"/>

    <Button
            android:id="@+id/btnAdd"
            android:layout_width="match_parent"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="20dp"
            android:layout_height="80dp"
            android:text="ADD RECORD"
            app:layout_constraintTop_toBottomOf="@+id/etMailId"/>

    <TextView
            android:id="@+id/tvName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:gravity="center"
            android:text="All The Inserted Records"
            android:textColor="@color/black"
            android:textSize="18sp"
            android:textStyle="bold"
            app:layout_constraintTop_toBottomOf="@+id/btnAdd"/>

    <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rvItemsList"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toBottomOf="@id/tvName"
            android:visibility="visible"
            tools:visibility="visible"
    />

    <TextView
            android:id="@+id/tvNoRecordsAvailable"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/btnAdd"
            android:gravity="center"
            android:textSize="18sp"
            android:textColor="#997b66"
            android:text="There Are No records"
            tools:visibility="visible"/>


</androidx.constraintlayout.widget.ConstraintLayout>

这是项目 xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/llMain"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="horizontal"
              android:gravity="center_vertical"
              android:padding="20dp">

    <TextView
            android:id="@+id/tvName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/black"
            android:textSize="16sp"
            android:text="Name"/>

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="5dp"
            android:layout_marginEnd="5dp"
            android:textSize="18sp"
            android:textStyle="bold"
            android:text=":"/>

    <TextView
            android:id="@+id/tvEmail"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textColor="@color/black"
            android:textSize="16sp"
            android:text="Email"/>

    <ImageView
            android:id="@+id/ivEdit"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:contentDescription="image"
            android:foreground="?attr/selectableItemBackgroundBorderless"
            android:scaleType="center"
            android:src="@drawable/ic_action_edit"/>

    <ImageView
            android:id="@+id/ivDelete"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:contentDescription="image"
            android:foreground="?attr/selectableItemBackgroundBorderless"
            android:scaleType="center"
            android:src="@drawable/ic_action_delete"/>

</LinearLayout>

我不知道是否有其他文件是罪魁祸首;但我可以添加它们。

如有任何帮助,我们将不胜感激。

我认为你需要做两件事。

  1. 尝试使 main.xml 文件中的 Recycler View 在垂直方向上尽可能大。例如android:layout_height="0dp"
  2. 我认为您应该向 Recycler View 添加约束。像 app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"

将底部约束添加到回收器,然后 0dp 到高度

您的 RecyclerView 设置了 wrap_content 的高度 - 这使得小部件的大小足以显示其所有内容。它不需要滚动,因为它足够大,可以显示所有内容!

问题是您无法看到 整个小部件,因为它太高了,此时底部已超出屏幕范围。对于可滚动容器,您通常希望限制它们的高度(如果是水平滚动,则限制宽度)以便在内容中显示“window”。如果内容太大无法放入 window,容器将滚动到 window 后面。

在您的情况下,您可能希望将 RecyclerView 的底部限制在屏幕底部,或者可能是位于其下方的 TextView 的顶部:

android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/tvName"
app:layout_constraintBottom_toBottomOf="parent"

定义列表占用的区域,作为 tvName 和布局底部之间的可用 space。 0dp 意味着它没有绝对高度,它的大小会适应那些垂直限制。你可以更聪明一点,但这是基本的想法 - 定义一个区域供你的列表使用,如果它的内容不够大,列表将滚动