我需要让我的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);
}
});
}
答案 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