Видимость с привязкой к данным для пустого представления RecyclerView не имеет никакого эффекта

Я пытаюсь реализовать решение пустого представления для RecyclerView через привязку данных на основе этого решения. У меня есть RecyclerView и RelativeLayout (пустое представление) в SwipeRefreshLayout. Вот XML для макета:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <import type="android.view.View"/>
        <variable
            name="dataset"
            type="...SeriesList"/>
    </data>
    <android.support.v4.widget.SwipeRefreshLayout
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/swipe_refresh_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/list"
            android:name="...SeriesFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="2dp"
            android:layout_marginTop="10dp"
            app:layoutManager="LinearLayoutManager"
            tools:context=".fragments.SeriesFragment"
            android:visibility="@{dataset.size() > 0 ? View.VISIBLE : View.GONE}"/>

        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/empty_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="@{dataset.size() > 0 ? View.GONE : View.VISIBLE}">

            <TextView
                android:id="@+id/empty_text"
                style="@style/Base.TextAppearance.AppCompat.Title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/empty_image"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="10dp"
                android:width="300dp"
                android:gravity="center"
                android:textColor="#59000000" />

            <ImageView
                android:id="@+id/empty_image"
                android:layout_width="128dp"
                android:layout_height="160dp"
                android:layout_centerInParent="true"
                android:src="@drawable/empty" />
        </RelativeLayout>
    </android.support.v4.widget.SwipeRefreshLayout>
</layout>

Как вы можете видеть RelativeLayout после того, как RecyclerView является пустым представлением, с их видимостью, основанной на размере набора данных, который является SeriesList (расширяет ObservableArrayList). Во фрагменте, содержащем этот макет, я связываю данные следующим образом:

    FragmentSeriesListBinding binding = FragmentSeriesListBinding.inflate(inflater);
    binding.setDataset(getmAdapter().getVisibleSeries());

Исходя из этого, я предполагаю, что когда видимый SeriesList адаптера пуст, видимости RecyclerView будут УТВЕРЖДЕНЫ, а пустое представление будет VISIBLE. После тестирования с пустым набором данных и RecyclerView (без элементов), и пустое представление имеют видимость VISIBLE, что не должно быть возможным. Может ли кто-то пролить свет на то, почему это не работает, как я ожидаю?

1 ответ

Решение

Поэтому я решил исправить это после того, как прочел здесь, что у SwipeRefreshLayout должен быть один дочерний элемент, поэтому я обернул RecyclerView и RelativeLayout в FrameLayout. Я также использовал это решение для раздувания макета фрагмента с помощью метода dataBindingUtil inflate() и установки привязки в методе фрагмента onCreateView().

Другие вопросы по тегам