RecyclerView不会显示Fragment中的所有项目

时间:2017-09-01 10:44:35

标签: android android-fragments android-recyclerview

问题

在我的Activity中,我初始化了Fragment,其中包含RecyclerView。但我已经认识到它没有显示所有项目。这意味着代替14只显示11项。此外,最后一个可见项目(编号12)被切断

我的实施

Activity包含一个空FrameLayout作为Fragment容器:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res./android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#e0e0e0">

<LinearLayout
    android:id="@+id/layout_footer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="@drawable/layout_border_white"
    android:paddingBottom="@dimen/footer_padding">

    <include layout="@layout/footer"></include>

</LinearLayout>


<FrameLayout
    android:id="@+id/fragment_start"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@id/layout_footer"/>

</RelativeLayout>

这里是碎片中的RecyclerView:

<android.support.constraint.ConstraintLayout   
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="#e0e0e0"
android:orientation="vertical">

<LinearLayout
    android:id="@+id/layout_header"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:background="@android:color/white"
    android:padding="@dimen/startpage_padding"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <include layout="@layout/header"></include>

</LinearLayout>


<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/startpage_margin"
    android:scrollbars="vertical"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/layout_header"/>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <ProgressBar
        android:id="@+id/pb_loading_indicator"
        android:layout_width="@dimen/startpage_progressbar"
        android:layout_height="@dimen/startpage_progressbar"
        android:visibility="invisible"/>

</LinearLayout>


<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <TextView
        android:id="@+id/tv_error_message_display"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:padding="@dimen/startpage_text_padding"
        android:text="@string/error_message"
        android:textSize="@dimen/startpage_text"
        android:visibility="invisible"/>
</LinearLayout>

解决方法

我已经在match_parent中使用RecyclerView进行了尝试,并为其添加了paddingBottom。使用paddingBottom =&#34; 30dp&#34;还有一个元素是可见的,但这不是一个好的解决方案。此外,我的Activity正在使用AlertDialog - 在Manifest中设置的主题。删除它会显示相同的结果。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:12)

我终于修好了。问题是我wrap_content RecyclerView内的ConstraintLayout。通过使用wrap_content作为RecyclerView的高度,父级将其底部切掉。所以你必须使用0dp作为高度和一个constraintBottom。

    <android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_margin="@dimen/startpage_margin"
    android:scrollbars="vertical"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/layout_header"/>

答案 1 :(得分:2)

尝试将xml更改为以下内容,因为约束布局在以不正确的方式使用时会包装空格:

:removeFromPath

答案 2 :(得分:0)

我使用wrap_content作为高度,但是recycleview的底部仍然滚动离开屏幕底部,因此最后一个项目不可见。我诉诸于使用一种有问题的解决方案,在recyclerview上添加底部填充,直到最后一个项目可见