SwipeRefreshLayout不能与空列表一起使用

时间:2018-08-04 15:59:25

标签: java android

我的应用程序包含一个SwipeRefreshLayout及其内部的listView。该列表从服务器接收数据。因此,在提取数据并正确填充列表后,滑动即可刷新,但当数据未传递到列表且为空时,SwipeRefresh无效。为什么在listView为空时我不能刷卡?

那是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/colorGrayHell"
android:layout_height="match_parent">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBar"
    android:layout_width="match_parent"
    android:layout_height="140dp"
    android:fitsSystemWindows="true"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/toolbar_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        app:expandedTitleMarginBottom="56dp"
        app:contentScrim="@color/colorPrimary"
        app:expandedTitleGravity="bottom|center"
        app:expandedTitleTextAppearance="@style/CollBar"
        app:title="Tankstellen"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:toolbarId="@+id/toolbar">

        <ImageView
            android:id="@+id/backg"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            android:scaleType="centerCrop"
            android:src="@drawable/backthree"
            app:layout_collapseMode="parallax" />

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:layout_marginBottom="48dp"
            app:layout_collapseMode="pin"
            android:layout_gravity="bottom"
            app:popupTheme="@style/AppTheme.PopupOverlay">

        </android.support.v7.widget.Toolbar>

    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="10dp"
    android:fillViewport="true"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="55dp">

        <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/swipe_refresh_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context=".MainActivity">

            <ListView
                android:id="@+id/list"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="7dp"
                android:layout_marginRight="7dp"
                android:layout_marginTop="10dp"
                android:background="@android:color/white"
                android:divider="@color/colorGrayHell"
                android:dividerHeight="10dp"
                android:nestedScrollingEnabled="true" />

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

    </RelativeLayout>

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

</android.support.design.widget.CoordinatorLayout>

1 个答案:

答案 0 :(得分:1)

您的列表视图和滑动刷新布局位于嵌套滚动视图内,这意味着嵌套滚动视图的子代高度自动变为换行内容(在您的情况下为相对布局)(它可能还会向您显示皮棉警告以替换相对布局的父级高度以包装内容)。 因此,当列表中没有数据时,整个布局组的高度将变为0,而需要滑动刷新的位置的高度将变为0,并且无法在高度为0的布局中滑动。

要解决此问题,您可以在嵌套滚动视图上方以匹配父级的高度进行线性布局,然后在其上方放置滑动刷新​​布局。

让我知道您是否需要示例代码。

编辑

好吧!所以这是我发现可以解决此问题的解决方法。您可以尝试一下,如果能解决您的问题,请告诉我。 想法是将所有内容包装为滑动刷新布局。

<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent">

  <android.support.v7.widget.LinearLayoutCompat
  android:layout_width="match_parent"
  android:layout_height="match_parent">

<android.support.design.widget.CoordinatorLayout 
    android:layout_width="match_parent"
    android:background="@color/colorGrayHell"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBar"
        android:layout_width="match_parent"
        android:layout_height="140dp"
        android:fitsSystemWindows="true"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:expandedTitleMarginBottom="56dp"
            app:contentScrim="@color/colorPrimary"
            app:expandedTitleGravity="bottom|center"
            app:expandedTitleTextAppearance="@style/CollBar"
            app:title="Tankstellen"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:toolbarId="@+id/toolbar">

            <ImageView
                android:id="@+id/backg"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                android:src="@drawable/backthree"
                app:layout_collapseMode="parallax" />

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:layout_marginBottom="48dp"
                app:layout_collapseMode="pin"
                android:layout_gravity="bottom"
                app:popupTheme="@style/AppTheme.PopupOverlay">

            </android.support.v7.widget.Toolbar>

        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:fillViewport="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingBottom="55dp">


                <ListView
                    android:id="@+id/list"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="7dp"
                    android:layout_marginRight="7dp"
                    android:layout_marginTop="10dp"
                    android:background="@android:color/white"
                    android:divider="@color/colorGrayHell"
                    android:dividerHeight="10dp"
                    android:nestedScrollingEnabled="true" />


        </RelativeLayout>

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

    </android.support.design.widget.CoordinatorLayout>
  </android.support.v7.widget.LinearLayoutCompat>
   </android.support.v4.widget.SwipeRefreshLayout>