我需要在onCreateViewHolder
中设置背景色。
因此,当我的position
等于position % 2 == 0
时,请设置背景颜色,否则请设置其他颜色。
我所有行的背景色都是标准色,这就是为什么我想在onCreateViewHolder
而不是onBindViewHolder
中使用它的原因。如果我错了请纠正我。问题是当我在holder.getAdapterPosition
内使用onCreateViewHolder
时会返回'-1'
。对我来说似乎很正常。但是我该如何解决?
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_common_item, viewGroup, false);
ViewHolder holder= new ViewHolder(mView);
if(holder.getAdapterPosition % 2 ==0)
{
//Row BackgroundColor to red.
}
else
{
//Row BackgroundColor to Green.
}
return holder;
}
因此,当我使用上述代码时,我得到的例外是索引超出范围。 有什么办法可以解决?
答案 0 :(得分:2)
尝试一下:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_common_item, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(position % 2 ==0) {
holder.itemView.setBackgroundColor(
ContextCompat.getColor(holder.itemView.getContext(), R.color.color_red));
} else {
holder.itemView.setBackgroundColor(
ContextCompat.getColor(holder.itemView.getContext(), R.color.color_green));
}
}
答案 1 :(得分:1)
根据理想的解决方案,您应该在onBindViewHolder中编写此代码以使用“ getAdapterPosition”。
如果您只希望onCreateViewHolder中的行背景颜色与尝试的颜色不同,这将连续为您提供一个红色行和另一个其他颜色行。
您需要创建一个全局变量。
布尔型Manual_color = true;
@Override 公共RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup,int viewType){
View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_common_item, viewGroup, false);
ViewHolder holder= new ViewHolder(mView);
if(Manual_color)
{
//Row BackgroundColor to red.
Manual_color = false;
}
else
{
//Row BackgroundColor to Green.
Manual_color = true;
}
return holder;
答案 2 :(得分:0)
您可以为已放大的视图设置颜色。
View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_common_item, viewGroup, false);
ViewHolder holder= new ViewHolder(mView);
if(holder.getAdapterPosition % 2 ==0) {
mView .setBackgroundColor(ContextCompat.getColor(this, R.color.color_red));
} else {
mView.setBackgroundColor(ContextCompat.getColor(this, R.color.color_green));
}