android.support.v7.widget.GridLayoutManager$LayoutParams 无法转换为 android.widget.LinearLayout$LayoutParams。

4

activitymain.xml

<android.support.v7.widget.RecyclerView
                            android:background="@color/primary_text"
                            android:layout_marginStart="@dimen/activity_horizontal_margin"
                            android:layout_below="@+id/adherence_text"
                            android:id="@+id/action_with_adherence"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content">

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

MainActivity.java

 actionWithAdherence=(RecyclerView) findViewById(R.id.action_with_adherence);
        //second parameter 3 represents it has 3 column
        //actionWithAdherence.setLayoutManager(new LinearLayoutManager(this));
        actionWithAdherence.setLayoutManager(new GridLayoutManager(this, 3));

    actionWithAdherence.setAdapter(new DashboardAdherence(this, actionListWithAdherence));

在这个类中调用适配器。

适配器 XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/adherence_section"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <at.grabner.circleprogress.CircleProgressView
        android:layout_gravity="center"
        app:cpv_maxValue="100"
        app:cpv_textSize="15dp"
        app:cpv_textColor="@color/white"
        app:cpv_unit="%"
        app:cpv_unitSize="10dp"
        app:cpv_unitColor="@color/white"
        app:cpv_unitScale="1"
        app:cpv_rimColor="@color/secondary_background"
        app:cpv_rimWidth="10dp"
            app:cpv_barWidth="4dp"
            android:id="@+id/action_adherence"
            android:layout_width="70dp"
            android:layout_height="70dp" />

    <TextView
        android:layout_gravity="center"
        android:id="@+id/action_name"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"
            android:layout_marginTop="5dp"
            android:text="Exercise"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

</LinearLayout>

适配器 onBindAdaper() 方法:

  if ((position+1)%3==0){
            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)adherenceHolder.adherenceSection.getLayoutParams();
            params.setMargins(0, 0, 0, 1);
            adherenceHolder.adherenceSection.setLayoutParams(params);
        }
        else
        {
            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)adherenceHolder.adherenceSection.getLayoutParams();
            params.setMargins(0, 0, 1, 1);
            adherenceHolder.adherenceSection.setLayoutParams(params);

        }

问题:

由于在我的主活动中,我将视图设置为网格布局,但在适配器中使用线性布局。因此,Android 无法将线性布局转换为网格布局。这导致了异常。

有没有办法可以将布局转换?


请使用GridLayout.LayoutParams代替LinearLayout.LayoutParams。 - Nas
1
我进行了更改,但现在出现了另一个错误:“java.lang.ClassCastException: android.support.v7.widget.GridLayoutManager$LayoutParams 无法转换为 android.widget.GridLayout$LayoutParams”。 - Ankur Khandelwal
1个回答

1
使用网格布局管理器参数。
GridLayoutManager.LayoutParams layoutParams
                = (GridLayoutManager.LayoutParams) adherenceHolder.adherenceSection.getLayoutParams();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接