RecyclerView onCreateViewHolder位置背景颜色

问题描述 投票:0回答:3

我需要在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;

}

因此,当我使用上面的代码时,我得到的异常是索引超出范围。有什么办法可以解决吗?

java android xamarin
3个回答
1
投票

根据理想的解决方案,您应该在onBindViewHolder中编写此代码以使用“getAdapterPosition”。

如果你只想在onCreateViewHolder中使用不同的背景颜色,那么你可以尝试这个,这将连续给你一个红色行和另一个颜色行。

你需要创建一个全局变量。

boolean Manual_color = true;

@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(Manual_color)
{
   //Row BackgroundColor to red.
   Manual_color = false;
}
else
{
  //Row BackgroundColor to Green.
  Manual_color = true;
}
return holder;

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

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));
}
© www.soinside.com 2019 - 2024. All rights reserved.