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 не может использовать линейный макет для макета сетки. Это вызывает исключение.
Есть ли способ, которым я могу отличить макет?
использование GridLayout.LayoutParams вместо LinearLayout.LayoutParams – Nas
я изменил, но получил другую ошибку сейчас «java.lang.ClassCastException: android.support.v7.widget.GridLayoutManager $ LayoutParams не может быть применено к android.widget.GridLayout $ LayoutParams " –