Подтвердить что ты не робот

RecyclerView отключает последний элемент

У меня есть фрагмент с панелью инструментов и recyclerView внутри него.

Я заполняю recyclerView фиктивными данными, а затем пытаюсь их показать. По какой-то причине последний элемент recyclerView получает отсечку.

Это XML-фрагмент фрагмента:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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="@color/background_1"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar_layout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/height_of_app_bar"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="@color/primary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:id="@+id/backdrop"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                android:src="@drawable/placeholder_rect_header"
                app:layout_collapseMode="parallax"/>

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/simpleList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</android.support.design.widget.CoordinatorLayout>

Элементы в списке действительно простые:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:background="@color/background_1"
    android:orientation="horizontal"
    android:padding="@dimen/space_for_a_bit_of_air">

    <ImageView
        android:id="@+id/album_cover"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center_vertical"
        android:scaleType="fitXY"
        android:src="@drawable/placeholder_album_cover"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="@dimen/space_for_distinguishing_stuff"
        android:orientation="vertical">

        <TextView
            android:id="@+id/album_title"
            style="@style/titleText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/sample_text_c"/>

        <TextView
            android:id="@+id/album_year"
            style="@style/subtitleText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/sample_text_a"/>

    </LinearLayout>

</LinearLayout>

Я сейчас в конце списка, но последний элемент по-прежнему выглядит отключенным

Я сейчас в конце списка, но последний элемент по-прежнему выглядит отключенным.

Я использую последнюю версию с 2015-09-23 из библиотек google, 23.0.1 (т.е. com.android.support:recyclerview-v7:23.0.1) и следующую конфигурацию на build.gradle

compileSdkVersion 23
buildToolsVersion "23.0.1"

defaultConfig {
   minSdkVersion 14
   targetSdkVersion 23
   versionCode 1
   versionName "1.0"

   multiDexEnabled true// Enabling multidex support
 }

Любая помощь будет принята с благодарностью, так как я схожу с этой проблемой: (

Решение

Хорошо, после очистки кода до простых вещей и устранения сложности я нашел проблему: это была комбинация неправильных флагов и отсутствующих или дополнительных атрибутов. Следующее работает отлично для Android 4.x и 5.x:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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:background="@color/background_1"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar_layout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/height_of_app_bar"
        android:fitsSystemWindows="true">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:collapsedTitleTextAppearance="@style/Title.collapsed"
            app:contentScrim="@color/primary"
            app:expandedTitleMarginStart="48dp"
            app:expandedTitleTextAppearance="@style/Title.Expanded"
            app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed">

            <ImageView
                android:id="@+id/backdrop"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                android:src="@drawable/artistic_4"
                app:layout_collapseMode="parallax"/>

            <View
                android:layout_width="match_parent"
                android:layout_height="@dimen/height_of_app_bar"
                android:background="@drawable/gradient"/>

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"/>

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/simpleList"
        style="@style/genericRecyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:listitem="@layout/item_discography_album"/>

</android.support.design.widget.CoordinatorLayout>

В двух словах, android: fitsSystemWindows = "true" должен находиться только у координаторовLayout, AppBarLayout и CollapsingToolbarLayout (которые мы хотим настроить на основе экрана на Android 5.x), приложение: layout_scrollFlags должен быть установлен в "прокрутить | enterAlways | enterAlwaysCollapsed", а панель инструментов должна иметь высоту, высоту actionBar. Наконец, лучше оставить RecyclerView максимально чистым, чтобы вы могли контролировать расстояние между макетами в каждой позиции.

4b9b3361

Ответ 1

Попробуйте изменить высоту RecyclerView на "wrap_content" и добавьте высоту AppBarLayout в качестве нижней границы.

<android.support.v7.widget.RecyclerView
        android:id="@+id/simpleList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/height_of_app_bar"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

Отрезанная часть элемента списка - это высота AppBarLayout.

Ответ 2

Это сработало для меня. Установите и высоту и ширину ресивера в 0dp

 <android.support.v7.widget.RecyclerView
    android:id="@+id/rv_materias"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginTop="20dp"
    android:background="@color/secondaryLightColor"
    app:layout_constraintBottom_toTopOf="@id/bottom_navigation"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/guideline6"></android.support.v7.widget.RecyclerView>

Ответ 3

Используйте RelativeLayout в качестве родителя RecycerView. Это работает для меня.

Ответ 4

У меня была та же проблема (даже отсутствующий весь элемент ViewHolder из моего списка) при использовании RecyclerView внутри ConstraintLayout. Как упомянула Сила Зиберт, установка нулевого значения layout_width и layout_height в RecyclerView сделала свое дело. Это немного сбивает с толку, потому что редактор через некоторое время возвращается к слову "match_constraints", в то время как XML-текст показывает 0dp. Не позволяйте этому сбить вас с толку, это должно работать.

Ответ 5

У меня есть фрагмент диалога, который содержит RecyclerView. Для моего начального общего макета ограничения ни одно из вышеупомянутых решений не работало, поэтому я изменил его на линейный макет, который работает без проблем. Этот макет содержит панель инструментов и обзор переработчика.

Ответ 6

добавить android:layout_gravity="top" для просмотра recyclerview. если это не сработало, добавьте android:layout_gravity="fill_verticle"

Ответ 7

Создайте FrameLayout поместите в него RecycerView с его match_parent как для width и для height. Вы можете framelayout размер framelayout так, как хотите.

Ответ 8

Убедитесь, что у вас есть layout_height качестве wrap_content для RelativeLayout и RecyclerView

Ответ 9

Вы можете попробовать следующее, поскольку это работает, как ожидалось:

<android.support.v7.widget.RecyclerView
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/layout_header">
</android.support.v7.widget.RecyclerView>

Ответ 10

Я перепробовал все доступные варианты на большинстве возможных сайтов, но не нашел решения. Тогда, я думаю, я могу использовать нижнюю прокладку? И да, это работает для меня.

Я делюсь кодом с вами. Больше ничего не требуется, кроме высоты, ширины и отступов.

андроид: "атр/actionBarSize" paddingBottom =

 <android.support.v7.widget.RecyclerView
    android:id="@+id/your id name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="?attr/actionBarSize"
    app:layout_constraintTop_toBottomOf="@+id/your field" />

Ответ 11

  <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="150dp"
  android:layout_marginStart="@dimen/_20"
    android:layout_marginEnd="@dimen/_20"
    app:layout_constraintTop_toBottomOf="@+id/linearLayout">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_Bookingagain"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:focusableInTouchMode="true"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent" />

</RelativeLayout>