2

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)); 

Aufruf der Adapter in das gegossen werden Klasse.

Adapter 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> 

Adapter 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); 

     } 

Ausgabe:

Da in meiner Haupttätigkeit ich den Blick auf die Grid setze aber in den Adapter Verwenden des linearen Layouts. Daher kann Android das lineare Layout nicht auf das Rasterlayout übertragen. THat verursacht die Ausnahme.

Gibt es eine Möglichkeit, das Layout zu übertragen?

+0

Verwendung GridLayout.LayoutParams statt LinearLayout.LayoutParams – Nas

+0

änderte ich aber einen anderen Fehler bekam jetzt „java.lang.ClassCastException: android.support.v7.widget.GridLayoutManager $ LayoutParams kann nicht in android.widget.GridLayout $ LayoutParams umgewandelt werden " –

Antwort

0

Verwendung Grid-Layout-Manager params

GridLayoutManager.LayoutParams layoutParams 
       = (GridLayoutManager.LayoutParams) adherenceHolder.adherenceSection.getLayoutParams(); 
Verwandte Themen