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

вызова адаптера в этом класс.

адаптер 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); 

     } 

Выпуск:

Поскольку в моей основной деятельности я устанавливаю вид на GridLayout, но в адаптере используя линейную компоновку. Таким образом, Android не может использовать линейный макет для макета сетки. Это вызывает исключение.

Есть ли способ, которым я могу отличить макет?

+0

использование GridLayout.LayoutParams вместо LinearLayout.LayoutParams – Nas

+0

я изменил, но получил другую ошибку сейчас «java.lang.ClassCastException: android.support.v7.widget.GridLayoutManager $ LayoutParams не может быть применено к android.widget.GridLayout $ LayoutParams " –

ответ

0

Использование Grid Layout менеджер Params

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