回收视图项目的多重背景色';在android中以n个间隔显示文本视图

回收视图项目的多重背景色';在android中以n个间隔显示文本视图,android,android-layout,android-recyclerview,Android,Android Layout,Android Recyclerview,我需要使我的RecyclerView项目的TextView显示多种背景色。假设我有7种不同的颜色代码,我需要在每7项之后显示。我的做法是这样。请帮忙 @Override public void onBindViewHolder(BuyCategoriesViewHolder holder, final int position) { holder.tv_name.setText(category.get(position).getCategory()); char firstCh

我需要使我的RecyclerView项目的TextView显示多种背景色。假设我有7种不同的颜色代码,我需要在每7项之后显示。我的做法是这样。请帮忙

@Override
public void onBindViewHolder(BuyCategoriesViewHolder holder, final int position) {
    holder.tv_name.setText(category.get(position).getCategory());
    char firstChar=category.get(position).getCategory().charAt(0);
    holder.tv_title.setText(String.valueOf(firstChar));

    if(position == 0){
        holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color1));
    }else if(position %7 == 0){
        holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color2));
    }else if(position %6 == 0){
        holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color3));
    }else if(position %5 == 0){
        holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color4));
    }else if(position %4 == 0){
        holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color5));
    }else if(position %3 == 0){
        holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color6));
    }else if(position %2 == 0){
        holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color7));
    }else {
        holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color1));
    }

    //holder.tv_title.setBackgroundResource(R.drawable.shape_circle);
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            callItemViewListener.callItemView(position);
        }
    });

}

您以错误的顺序使用模运算符。试着这样做:

if (position % 7 == 0) {
    holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color1));
} else if (position % 7 == 1) {
    holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color2));
} else if (position % 7 == 2) {
    holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color3));
} else if (position % 7 == 3) {
    holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color4));
} else if (position % 7 == 4) {
    holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color5));
} else if (position % 7 == 5) {
    holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color6));
} else if (position % 7 == 6) {
    holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext,R.color.list_color7));
}
或使用switch语句:

int colorRes = 0;
switch(position % 7) {
    case 0: colorRes = R.color.list_color1;
        break;
    case 1: colorRes = R.color.list_color2;
        break;
    case 2: colorRes = R.color.list_color3;
        break;
    case 3: colorRes = R.color.list_color4;
        break;
    case 4: colorRes = R.color.list_color5;
        break;
    case 5: colorRes = R.color.list_color6;
        break;
    case 6: colorRes = R.color.list_color7;
        break;
}
holder.tv_title.setBackgroundColor(ContextCompat.getColor(mContext, colorRes));

编辑
为完整起见,请将@Icraude的答案与示例结合起来。
这将定义一个颜色资源数组,然后使用模数运算符为该数组获取正确的索引:

// first define colors  
private final int[] backgroundColors = {
    R.color.list_color1, 
    R.color.list_color2, 
    R.color.list_color3,
    R.color.list_color4, 
    R.color.list_color5, 
    R.color.list_color6, 
    R.color.list_color7 };


// in onBindViewHolder
int index = position % backgroundColors.length;
int color = ContextCompat.getColor(mContext, backgroundColors[index]);
holder.tv_title.setBackgroundColor(color);
使用颜色创建一个数组(0到6),然后使用位置%7获取数组中的偏移量(颜色)。
通过这样做,您还可以摆脱带有许多分支的丑陋的if..else构造。

在适配器类内部使用它

  String[] mColors = {"#3F51B5", "#FF9800", "#009688", "#673AB7", "#999999", "#454545", "#00FF00",
                    "#FF0000", "#0000FF", "#800000", "#808000", "#00FF00", "#008000", "#00FFFF",
                    "#000080", "#800080", "#f40059", "#0080b8", "#350040", "#650040", "#750040",
                    "#45ddc0", "#dea42d", "#b83800", "#dd0244", "#c90000", "#465400",
                    "#ff004d", "#ff6700", "#5d6eff", "#3955ff", "#0a24ff", "#004380", "#6b2e53",
                    "#a5c996", "#f94fad", "#ff85bc", "#ff906b", "#b6bc68", "#296139"};
            productViewHolder.brandname.setBackgroundColor(Color.parseColor(mColors[i % 40]));

你到底有什么问题?@BartekLipinski:嗨!!我的问题是,前7个项目显示不同的颜色项目,这是罚款后,他们没有显示其正确的顺序。我需要为每7个项目进行排序。检查@RobCo-answer,它解决了您的问题。这对我很有帮助。非常感谢兄弟。