Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using CardView as Layout Parent for Swipeable item adapter causes ClassCastException #21

Closed
tunjid opened this issue Apr 13, 2015 · 1 comment

Comments

@tunjid
Copy link

tunjid commented Apr 13, 2015

Thanks for your library, it's fantastic! There's however a ClassCastException when a CardView is used as the parent layout for the swipeable item adapter. Full log output and layout xml follow.

04-12 21:43:18.146  24070-24070/com.myfab5.mobile.myfab5 W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x4169dd40)
04-12 21:43:18.162  24070-24070/com.myfab5.mobile.myfab5 E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.myfab5.mobile.myfab5, PID: 24070
    java.lang.ClassCastException: android.graphics.drawable.ColorDrawable cannot be cast to android.support.v7.widget.RoundRectDrawableWithShadow
            at android.support.v7.widget.CardViewEclairMr1.getShadowBackground(CardViewEclairMr1.java:159)
            at android.support.v7.widget.CardViewEclairMr1.getMinWidth(CardViewEclairMr1.java:150)
            at android.support.v7.widget.CardView.onMeasure(CardView.java:181)
            at android.view.View.measure(View.java:16537)
            at android.support.v7.widget.RecyclerView$LayoutManager.measureChildWithMargins(RecyclerView.java:5555)
            at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1332)
            at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1269)
            at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:523)
            at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:1988)
            at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2237)
            at android.view.View.layout(View.java:14857)
            at android.view.ViewGroup.layout(ViewGroup.java:4643)
            at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
            at android.view.View.layout(View.java:14857)
            at android.view.ViewGroup.layout(ViewGroup.java:4643)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:14857)
            at android.view.ViewGroup.layout(ViewGroup.java:4643)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:14857)
            at android.view.ViewGroup.layout(ViewGroup.java:4643)
            at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1594)
            at android.view.View.layout(View.java:14857)
            at android.view.ViewGroup.layout(ViewGroup.java:4643)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
            at android.view.View.layout(View.java:14857)
            at android.view.ViewGroup.layout(ViewGroup.java:4643)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:14857)
            at android.view.ViewGroup.layout(ViewGroup.java:4643)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:14857)
            at android.view.ViewGroup.layout(ViewGroup.java:4643)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:14857)
            at android.view.ViewGroup.layout(ViewGroup.java:4643)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
            at android.view.View.layout(View.java:14857)
            at android.view.ViewGroup.layout(ViewGroup.java:4643)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:14857)
            at android.view.ViewGroup.layout(ViewGroup.java:4643)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
            at android.view.View.layout(View.java:14857)
            at android.view.ViewGroup.layout(ViewGroup.java:4643)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:14857)
            at android.view.ViewGroup.layout(ViewGroup.java:4643)
            at android.view.ViewRootImpl.per
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    android:id="@+id/card_view"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="@dimen/quarter_margin"
    android:layout_marginLeft="@dimen/quarter_margin"
    android:layout_marginRight="@dimen/quarter_margin"
    card_view:cardCornerRadius="4dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:weightSum="10">

        <RelativeLayout
            android:id="@+id/container"
            android:layout_width="0px"
            android:layout_height="match_parent"
            android:layout_weight="9"
            android:background="?attr/selectableItemBackground"
            android:orientation="vertical">

            <TextView
                android:id="@+id/text_view"
                android:layout_width="44dp"
                android:layout_height="44dp"
                android:layout_alignParentTop="true"
                android:layout_marginBottom="4dp"
                android:layout_marginLeft="@dimen/activity_horizontal_margin"
                android:layout_marginTop="4dp"
                android:background="@drawable/circle_background"
                android:gravity="center"
                android:padding="3dp"
                android:text="@string/business_ranking"
                android:textColor="@color/white"
                android:textSize="18sp" />

            <TextView
                android:id="@+id/text_view_2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBaseline="@+id/text_view"
                android:layout_marginLeft="@dimen/activity_horizontal_margin"
                android:layout_marginTop="4dp"
                android:layout_toRightOf="@id/text_view"
                android:text="@string/text_view_2"
                android:textColor="@color/black"
                android:textSize="18sp" />

            <ImageView
                android:id="@+id/image_view"
                android:layout_width="@dimen/inline_photo_size"
                android:layout_height="@dimen/inline_photo_size"
                android:layout_alignParentLeft="true"
                android:layout_below="@+id/text_view"
                android:layout_marginLeft="@dimen/activity_horizontal_margin"
                android:layout_marginTop="@dimen/activity_vertical_margin"
                android:background="@drawable/image_placeholder" />

            <TextView
                android:id="@+id/text_view_3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignTop="@+id/image_view"
                android:layout_marginLeft="@dimen/activity_horizontal_margin"
                android:layout_toRightOf="@+id/image_view"
                android:gravity="left"
                android:text="@string/hello_world"
                android:textSize="14sp" />
        </RelativeLayout>

        <ImageView
            android:id="@+id/drag_handle"
            android:layout_width="0px"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:src="@drawable/ic_reorder_grey_600_24dp" />
    </LinearLayout>
</android.support.v7.widget.CardView>
@tunjid
Copy link
Author

tunjid commented Apr 13, 2015

After digging around, I see this has to do with CardView not having an API to set backgrounds with xml and the android.support.v7.widget.RoundRectDrawableWithShadow class has protected access.

I've fallen back to using a LinearLayout with a 9 patch image for the shadow.

@tunjid tunjid closed this as completed Apr 13, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant