Несколько SwipeRefreshLayout и RecyclerView в wrap_content

У меня есть макет с двумя 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

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

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

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

Помогает ли это решить вашу проблему, когда вы используете NestedScrollView вместо scrollview?

jle 27.08.2018 17:22

@Joe S не работает

user3576455 27.08.2018 17:36

Хорошо. Список заполнен или пуст?

jle 27.08.2018 17:37

@Joe S заполнен, потому что если я изменяю wrap_content с фиксированной высотой, элементы отображаются

user3576455 27.08.2018 17:40

@Joe S Я не понимаю вопроса. Проблема в wrap_content не отображается recycleview. С одиночными SwipeRefreshLayout и RecyclerView элемент отображается (высота match_parent), но оба не отображаются (height = wrap_content), отображается только фиксированная высота

user3576455 27.08.2018 17:48

Я знаю, я уже удалил комментарий. Для меня не совсем понятно, чего вы хотите добиться. Вы хотите иметь swipeRefreshLayout и RecyclerView одновременно как wrap_content, или что вы хотите получить?

jle 27.08.2018 17:51

оба wrap_content, 200dp предназначены только для тестирования, я изменил макет с желанием

user3576455 27.08.2018 17:58

@Joe S Я попытался удалить swipeRefreshLayout, и он отлично работает. Вы знаете, почему с swipeRefreshLayout не работает?

user3576455 27.08.2018 18:07

Не знаю, сработает ли это, но установите высоту SwipeRefreshLayout на match_parent. Я пробовал это, и мне кажется, что это не выходит за рамки списка. Если не работает, снова переключитесь на NestedScrollView.

jle 27.08.2018 18:18

@Joe S не работает

user3576455 27.08.2018 18:32

Ладно, тогда я этого не вижу. Я могу только предложить вам взглянуть на весь проект, чтобы я мог его правильно протестировать

jle 27.08.2018 19:34
0
11
426
1

Ответы 1

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

Объяснение:

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

Происходит следующее:

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

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

Я удалил строку setHasFixedSize (true), но элемент не отображается

user3576455 27.08.2018 22:11

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