在android中以n个间隔对recyclerview项目的TextView进行多种背景颜色

时间:2017-03-15 10:35:42

标签: 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 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);
        }
    });

}

3 个答案:

答案 0 :(得分:6)

您使用的模数运算符错误。 试试这样:

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

修改
为了完整起见,请将@iClaude的答案与一个例子结合起来:

// defined in the adapter  
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 bgColor = ContextCompat.getColor(mContext, backgroundColors[position % 7]);
    holder.tv_title.setBackgroundColor(bgColor);

答案 1 :(得分:1)

使用颜色创建一个数组(0到6),然后使用位置%7来获取数组中的偏移量(颜色)。 通过这样做,你也可以摆脱那个带有许多分支的丑陋if..else结构。

答案 2 :(得分:0)

在适配器类内部使用此

~/.zapierrc