带有SwipeRefresh的ListView上的MarginLayoutParams ClassCastException

时间:2017-03-17 10:09:37

标签: android android-layout

我在ListView上实现pull to refresh手势,我有这个简单的布局xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

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

        <ListView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:headerDividersEnabled="true"
            android:footerDividersEnabled="true"
            android:dividerHeight="5dp"
            android:divider="@color/grey"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:orientation="vertical"
            android:scrollbarStyle="outsideOverlay" />

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

    <ProgressBar
        android:id="@+id/progressbar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:visibility="gone" />

</RelativeLayout>

由于我使用SwipeRefreshLayout,它给出了ClassCastException

java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.view.ViewGroup$MarginLayoutParams

我用于其他目的的非相关代码

ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams)listview.getLayoutParams();
mlp.setMargins(0, 0, 0, 300);

如果我删除SwipeRefreshLayout,它可以正常工作。为什么会这样?

1 个答案:

答案 0 :(得分:1)

SwipeRefreshLayout未使用为其子女延长LayoutParams的自定义MarginLayoutParams。它只是使用ViewGroup.LayoutParams。这就是为什么如果你在xml中设置SwipeRefreshLayout's孩子的余量,它没有任何结果。

这就是为什么你不能将getLayoutParams()的结果转换为ViewGroup.MarginLayoutParams