SwipeRefresh布局无法使用自定义空列表视图

时间:2014-05-16 21:42:09

标签: android listview android-listfragment empty-list swiperefreshlayout

我正在尝试在我的一个片段中添加SwipeRefreshLayout布局。 当列表包含一些元素时,一切都按预期工作。

问题是当我的清单为空时。当列表中不包含任何项目时,我会显示ViewStub,此时我的OnRefreshListener永远不会被触发。

这是我的ListFragment xml:

<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/swipeRenewals"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@android:id/list"
            android:fadingEdge="vertical"
            android:layout_gravity="center"
            android:cacheColorHint="@android:color/transparent"/>
        <ViewStub
            android:id="@android:id/empty"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:layout="@layout/empty_renewal"/>
    </FrameLayout>

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

我在ViewStub中加载的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"/>
        <ImageView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_warning"
            android:adjustViewBounds="true"
            android:layout_weight="1" />
        <ImageView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"/>
    </LinearLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/no_renewal"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/refresh_for_new"/>

</LinearLayout>

当列表为空时,有没有办法让刷卡手势触发刷新?

1 个答案:

答案 0 :(得分:3)

显然写下问题有帮助。

我通过在ScrollView中封装我的ViewStub布局解决了我的问题。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center">

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2"/>
            <ImageView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_warning"
                android:adjustViewBounds="true"
                android:layout_weight="1" />
            <ImageView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2"/>
        </LinearLayout>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="@string/no_renewal"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="@string/refresh_for_new"/>

    </LinearLayout>
</ScrollView>