У меня есть макет с двумя 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
Но это не работает.
Есть решение?
Большое спасибо
@Joe S не работает
Хорошо. Список заполнен или пуст?
@Joe S заполнен, потому что если я изменяю wrap_content с фиксированной высотой, элементы отображаются
@Joe S Я не понимаю вопроса. Проблема в wrap_content не отображается recycleview. С одиночными SwipeRefreshLayout и RecyclerView элемент отображается (высота match_parent), но оба не отображаются (height = wrap_content), отображается только фиксированная высота
Я знаю, я уже удалил комментарий. Для меня не совсем понятно, чего вы хотите добиться. Вы хотите иметь swipeRefreshLayout и RecyclerView одновременно как wrap_content, или что вы хотите получить?
оба wrap_content, 200dp предназначены только для тестирования, я изменил макет с желанием
@Joe S Я попытался удалить swipeRefreshLayout, и он отлично работает. Вы знаете, почему с swipeRefreshLayout не работает?
Не знаю, сработает ли это, но установите высоту SwipeRefreshLayout на match_parent. Я пробовал это, и мне кажется, что это не выходит за рамки списка. Если не работает, снова переключитесь на NestedScrollView.
@Joe S не работает
Ладно, тогда я этого не вижу. Я могу только предложить вам взглянуть на весь проект, чтобы я мог его правильно протестировать
Короче, вы должны удалить строки setHasFixedSize(true).
Объяснение:
Для setHasFixedSize следует установить значение true, если вы выполняете нет и ожидаете, что ресайклервью изменится в размере (ширине или высоте). Однако в вашем случае вы хотите, чтобы он имел высоту wrap_content. Итак, вам нужно удалить эту строку.
Происходит следующее:
Это также причина, по которой вы видите элементы при установке определенного значения высоты.
Я удалил строку setHasFixedSize (true), но элемент не отображается
Помогает ли это решить вашу проблему, когда вы используете NestedScrollView вместо scrollview?