如何根据子位置动态更改recyclerview背景(不是项目背景)颜色?

时间:2017-11-19 12:18:02

标签: android android-recyclerview

我有一个像下图所示的回收视图

this image

背景颜色是在适配器中使用位置动态给出的,因此只有当项目(卡片)我可以为背景着色时,我才能将linearlayout作为cardview的父级,并且我为线性布局着色。

recyclerview:

<android.support.v7.widget.RecyclerView
        android:id="@+id/cardView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="40dp"
        style="@style/scrollbar_style"
        />

这是项目资源:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:id="@+id/back"
android:paddingBottom="10dp"
android:orientation="vertical">

<android.support.v7.widget.CardView
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dp"
card_view:cardCornerRadius="4dp">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="4dp"
    android:gravity="center"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/iconEntry"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:adjustViewBounds="true"
        android:scaleType="centerInside"
        android:layout_marginBottom="2dp"/>

    <TextView
        android:id="@+id/titleEntry"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="12sp"
        android:textStyle="bold"
        android:paddingStart="4dp"
        android:paddingEnd="4dp"
        android:layout_marginBottom="2dp"/>

    <TextView
        android:id="@+id/titleSpanishEntry"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="12sp"
        android:textStyle="bold"
        android:paddingStart="4dp"
        android:paddingEnd="4dp"
        android:layout_marginBottom="2dp"/>

    <TextView
        android:id="@+id/countEntry"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingStart="4dp"
        android:paddingEnd="4dp"
        android:textSize="10sp"/>

</LinearLayout>
</android.support.v7.widget.CardView>

适配器:

    public LinearLayout back;

    public MyViewHolder(View view) {
        super(view);
        back = view.findViewById(R.id.back);
    }

适配器onBindViewHolder:

holder.back.setBackgroundColor(Color.parseColor(
EntriesItemList.get(getCategory(position))
.getDisposalTypeCategory()
.getColor()));

现在要求是颜色,即使第1部分没有像空白空间这样的项目。

只有在我可以根据适配器位置动态更改recyclerview背景(而不是卡片背景)时才能完成,但看起来不可能,因为两者之间没有任何关系。有关如何做到这一点的任何建议吗?

2 个答案:

答案 0 :(得分:0)

一种解决方案是在适配器构造函数中传递RecyclerView,并在适配器onBindViewHolder方法中根据适配器位置更改RecyclerView背景。

答案 1 :(得分:0)

我已经解决了这个问题,总是通过添加虚拟不可见项来确保连续3个项目,以便背景颜色一直延伸到整行。