Несколько SwipeRefreshLayout и RecyclerView в wrap_content - PullRequest
0 голосов
/ 27 августа 2018

У меня есть макет с 2 SwipeRefreshLayout и RecyclerView, он работает только если фиксированный layout_height (например, 200dp). Если установлено значение wrap_content, элементы не отображаются.

Я перепробовал много решений, но он по-прежнему не работает. Мой макет:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        tools:ignore="UselessParent">

        <TextView
            android:id="@+id/feedNews1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:gravity="center"
            android:paddingBottom="10dp"
            android:paddingTop="10dp"
            android:text=""
            android:textColor="#FFFFFF"
            android:textSize="@dimen/text_feed_rss_title_size" />

        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/swipeRefreshLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/recyclerView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </android.support.v4.widget.SwipeRefreshLayout>

        <TextView
            android:id="@+id/feedNews2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:gravity="center"
            android:paddingBottom="10dp"
            android:paddingTop="10dp"
            android:text=""
            android:textColor="#FFFFFF"
            android:textSize="@dimen/text_feed_rss_title_size" />


        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/swipeRefreshLayout2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp" >

            <android.support.v7.widget.RecyclerView
                android:id="@+id/recyclerView2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

        </android.support.v4.widget.SwipeRefreshLayout>

        <LinearLayout
            android:id="@+id/adsContainerNews"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="2dp"
            android:gravity="center"
            android:orientation="vertical"
            android:visibility="gone">

            <com.google.android.gms.ads.AdView
                android:id="@+id/adViewNews"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                ads:adSize="BANNER"
                ads:adUnitId="@string/banner_ad_unit_id" />
        </LinearLayout>

    </LinearLayout>

</ScrollView>

В этом случае отображается только первый RecyclerView

Моя сборка:

compileSdkVersion 27
minSdkVersion 14
targetSdkVersion 27
implementation 'com.android.support:recyclerview-v7:27.1.1'

Мой код:

recyclerView1.setHasFixedSize(true);
recyclerView1.setNestedScrollingEnabled(false);

recyclerView2.setHasFixedSize(true);
recyclerView2.setNestedScrollingEnabled(false);

Я тоже пробовал с MyLinearLayoutManager

public class MyLinearLayoutManager extends android.support.v7.widget.LinearLayoutManager

но это не работает.

Есть ли решение?

Большое спасибо

1 Ответ

0 голосов
/ 27 августа 2018

Короче, вы должны удалить строки setHasFixedSize(true).

Пояснение:

setHasFixedSize должно быть установлено в true, если вы не ожидаете, что recyclerview изменится в размере (ширина или высота). Однако в вашем случае вы хотите, чтобы он имел высоту wrap_content. Поэтому вам нужно удалить эту строку.

Что происходит следующим образом:

  • Изначально у переработчика нет предметов, он получает высоту 0 .
  • Далее элементы добавляются. Однако для него установлен фиксированный размер, поэтому он больше не будет изменять размер.
  • Так что мы не видим новых видимых строк.

Это также причина, по которой вы видите элементы при установке высоты на определенное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...