我正在使用RecyclerView来显示TextView列表。我希望位置0,1,2,3和4中的TextView具有彩色方块。这是我的代码:
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.mItem = mValues.get(position);
if(holder.getAdapterPosition()==0) {
holder.lytColor.setBackgroundColor(Color.rgb(255, 201, 8));
} else if(holder.getAdapterPosition()==1) {
holder.lytColor.setBackgroundColor(Color.rgb(242, 157, 32));
}else if(holder.getAdapterPosition()==2) {
holder.lytColor.setBackgroundColor(Color.rgb(177, 134, 66));
}else if(holder.getAdapterPosition()==3) {
holder.lytColor.setBackgroundColor(Color.rgb(123, 102, 72));
}else if(holder.getAdapterPosition()==4){
holder.lytColor.setBackgroundColor(Color.rgb(77,72,69));
}
}
有效:
问题是当我向下滚动其他TextView时也有颜色:
我已经使用Log.e(“test”,getAdapterPosition())来查看位置,它显示了期望值,即项目在ArrayList中的位置。
在我的手机中它遵循下一个模式:5色,10无色,5色,10无色......
我已经在其他手机中测试了应用程序,屏幕更大,图案更改,5色,13无色,5色,13无色......
所以我假设可以在屏幕上显示的项目数量与问题有关。
PS:我已经尝试过使用位置参数
有什么建议吗?
答案 0 :(得分:1)
是的,你是对的!适配器中的位置将以适配器的性质回收它。
你可以做的是在模型中使用一个变量,让我们说colourId。在添加到列表时为其分配值。比方说colourId = 1,2,3等等。
并在适配器中获取该值,如下所示
mValues.get(position).getCoulourId();
比在该值上应用if条件。