wrap_content中有多个SwipeRefreshLayout和RecyclerView

时间:2018-08-27 15:18:11

标签: android android-recyclerview swiperefreshlayout linearlayoutmanager

我的布局中有2个SwipeRefreshLayoutRecyclerView,只有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 :(得分:0)

简而言之,您应该删除setHasFixedSize(true)行。

说明:

如果不希望 recyclerview 更改大小(宽度或高度),则应将

setHasFixedSize设置为true。但是,根据您的情况,您希望它的高度为wrap_content。因此,您需要删除此行。

发生的情况如下:

  • recyclerview最初没有任何物品,高度为 0
  • 接下来,添加项目。但是,已将其设置为固定大小,因此不会再调整大小。
  • 所以我们看不到新行。

这也是为什么将高度设置为特定值时看到项目的原因。