Recyclerview Elements在屏幕末端被切断

时间:2019-06-14 20:15:21

标签: android android-recyclerview

我正在尝试显示使用Recyclerview的人员列表。但是列表仅在屏幕末尾被切断。 如果我更改布局,则会显示更多人,但在屏幕末尾仍然会被剪掉

第一个列表应包含12个元素,而它仅显示最初可见的9/10个元素,即使我向下滚动时其余元素也应可见。 如果recyclerview最初是完全不可见的(请参阅第二个视图),则可以在滚动时看到所有元素。

图片:

https://ibb.co/kg2q03H

https://ibb.co/19YgXT9

https://ibb.co/0f03GKH

https://ibb.co/3vpgQSp

<ScrollView
        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"
        tools:context=".ViewDetails" android:scrollbarSize="0dp"
>
    <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content"
                  android:orientation="vertical">
        <TableLayout android:layout_height="wrap_content"
                     android:layout_width="match_parent" android:id="@+id/table">
            <TableRow android:layout_width="match_parent" android:layout_height="match_parent">
                <LinearLayout
                        android:orientation="horizontal"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" android:layout_gravity="left">
                    <ImageView
                            android:layout_width="24dp"
                            android:layout_height="24dp" android:id="@+id/name" android:layout_weight="1"
                            android:layout_margin="16dp" app:srcCompat="@drawable/wappentransparent"/>
                    <TextView
                            android:text="Musikprobe"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content" android:id="@+id/nameText"
                            android:layout_gravity="center_vertical" android:textSize="24sp"
                            android:layout_margin="8dp" android:textColor="@color/primaryTextColor"
                    />
                </LinearLayout>
            </TableRow>
            <TableRow android:layout_width="match_parent" android:layout_height="match_parent">
                <LinearLayout
                        android:orientation="horizontal"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" android:layout_gravity="left">
                    <ImageView
                            android:layout_width="24dp"
                            android:layout_height="24dp" android:id="@+id/date" android:layout_weight="1"
                            android:layout_margin="16dp" app:srcCompat="@drawable/ic_date_range"/>
                    <TextView
                            android:text="01.01.2000"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content" android:id="@+id/dateText"
                            android:layout_gravity="center_vertical" android:textSize="18sp"
                            android:layout_margin="8dp" android:textColor="@color/primaryTextColor"/>
                </LinearLayout>
            </TableRow>
            <TableRow android:layout_width="match_parent" android:layout_height="match_parent">
                <LinearLayout
                        android:orientation="horizontal"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" android:layout_gravity="left">
                    <ImageView
                            android:layout_width="24dp"
                            android:layout_height="24dp" android:id="@+id/time" android:layout_weight="1"
                            android:layout_margin="16dp" app:srcCompat="@drawable/ic_schedule_black_24dp"/>
                    <TextView
                            android:text="12:00"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content" android:id="@+id/timeText"
                            android:layout_gravity="center_vertical" android:textSize="18sp"
                            android:layout_margin="8dp" android:textColor="@color/primaryTextColor"/>
                    <TextView
                            android:text="Uhr"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content" android:id="@+id/uhrConst"
                            android:layout_gravity="center_vertical" android:textSize="18sp"
                            android:layout_marginTop="8dp"
                            android:layout_marginBottom="8dp" android:textColor="@color/primaryTextColor"/>
                </LinearLayout>
            </TableRow>
            <TableRow android:layout_width="match_parent" android:layout_height="match_parent"
                      android:id="@+id/infoTabRow">
                <LinearLayout
                        android:orientation="horizontal"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" android:layout_gravity="left">
                    <ImageView
                            android:layout_width="24dp"
                            android:layout_height="24dp" android:id="@+id/info" android:layout_weight="1"
                            android:layout_margin="16dp" app:srcCompat="@drawable/ic_event_note"/>
                    <TextView
                            android:text="Hier steht ganz viel info und so"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content" android:id="@+id/infoText"
                            android:layout_gravity="center_vertical" android:textSize="18sp"
                            android:layout_margin="8dp" android:textColor="@color/primaryTextColor"/>
                </LinearLayout>
            </TableRow>

            <TableRow
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
                <View
                        android:id="@+id/divider"
                        android:layout_width="wrap_content"
                        android:layout_height="1dp"
                        android:background="?android:attr/listDivider"
                />
            </TableRow>

            <TableRow>

                <androidx.constraintlayout.widget.ConstraintLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent">

                    <Button
                            android:id="@+id/signOut"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:backgroundTint="@android:color/holo_red_light"
                            android:text="ABMELDEN"
                            app:layout_constraintStart_toEndOf="@+id/signUp"
                            app:layout_constraintTop_toTopOf="parent"
                            app:layout_constraintBottom_toBottomOf="parent"/>
                    <Button
                            android:id="@+id/signUp"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:backgroundTint="@android:color/holo_green_light"
                            android:text="ANMELDEN"
                            app:layout_constraintTop_toTopOf="parent"
                            app:layout_constraintBottom_toBottomOf="parent"
                            app:layout_constraintStart_toStartOf="parent"/>
                </androidx.constraintlayout.widget.ConstraintLayout>
            </TableRow>

            <TableRow
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
                <View
                        android:id="@+id/divider2"
                        android:layout_width="wrap_content"
                        android:layout_height="1dp"
                        android:background="?android:attr/listDivider"
                />
            </TableRow>

            <TableRow android:layout_width="match_parent" android:layout_height="wrap_content"
                      android:id="@+id/signedInHeader">
                <LinearLayout
                        android:orientation="horizontal"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" android:layout_gravity="left">
                    <ImageView
                            android:layout_width="24dp"
                            android:layout_height="24dp" android:id="@+id/signedUp" android:layout_weight="1"
                            android:layout_margin="16dp" app:srcCompat="@drawable/ic_people_green"/>
                    <TextView
                            android:id="@+id/teilnehmer"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:textSize="24sp"
                            android:layout_margin="8dp"
                            android:text="Teilnehmer" android:textColor="@color/primaryTextColor"
                            android:layout_gravity="center_vertical"/>

                </LinearLayout>
            </TableRow>


            <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/rvTeilnehmer"
                    android:layout_width="match_parent"
                    android:layout_marginLeft="56dp"
                    android:layout_marginStart="56dp" android:layout_height="match_parent"/>
            <TableRow android:layout_width="match_parent" android:layout_height="wrap_content"
                      android:id="@+id/signedOutHeader">
                <LinearLayout
                        android:orientation="horizontal"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" android:layout_gravity="left">
                    <ImageView
                            android:layout_width="24dp"
                            android:layout_height="24dp" android:id="@+id/signedOut" android:layout_weight="1"
                            android:layout_margin="16dp" app:srcCompat="@drawable/ic_people_red"/>
                    <TextView
                            android:id="@+id/abgesagt"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:textSize="24sp"
                            android:layout_margin="8dp"
                            android:text="Abgesagt" android:textColor="@color/primaryTextColor"
                            android:layout_gravity="center_vertical"/>

                </LinearLayout>
            </TableRow>


            <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/rvAbgesagt"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" android:layout_marginLeft="56dp"
                    android:layout_marginStart="56dp"/>
        </TableLayout>
    </FrameLayout>
</ScrollView>

        rvsi = view.findViewById(R.id.rvTeilnehmer)
        val llmsi = object : LinearLayoutManager(context) {
            override fun canScrollVertically(): Boolean {
                return false
            }
        }
        rvsi!!.layoutManager = llmsi
        rvsi!!.adapter = RVPersonAdapter(PersonList().persons)
//PersonList().person is an arraylist of 12 Persons(which contain a String with the name)

2 个答案:

答案 0 :(得分:0)

根据更新后的帖子,看来嵌套滚动可能存在问题。参见RecyclerView inside ScrollView is not working

要点是,您需要用NestedScrollView替换ScrollView,然后在RecyclerViews中设置一个标志,以使其能够正确滚动。

如果您不使用NestedScrollView,则父ScrollView将拦截所有滚动事件,而不是将其发送到RecyclerViews-因此,从技术上讲,这些项目都在回收站中,您就无法到达它们。 / p>

答案 1 :(得分:0)

考虑在滚动视图中使用多视图类型RecyclerView ,而不是RecyclerView。您可以将NestedScrollView + RecyclerView用作上面建议的 @VerumCH (也应通过将RecyclerView的nestedScrollingEnabled属性设置为false来禁用嵌套滚动),但是还有另一个问题。如果您将在NestedScrollView中使用RecyclerView,则列表视图将不会被回收并且会立即提供给您。

相关问题