回收视图项目的多重背景色';在android中以n个间隔显示文本视图
我需要使我的RecyclerView项目的TextView显示多种背景色。假设我有7种不同的颜色代码,我需要在每7项之后显示。我的做法是这样。请帮忙回收视图项目的多重背景色';在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
@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,它解决了您的问题。这对我很有帮助。非常感谢兄弟。