簡體   English   中英

RecyclerView onCreateViewHolder位置背景顏色

[英]RecyclerView onCreateViewHolder position background Color

我需要在onCreateViewHolder設置背景顏色。 因此,當我的position等於position % 2 == 0設置背景顏色,否則請設置其他顏色。 我所有行的背景色都是標准色,這就是為什么我想在onCreateViewHolder而不是onBindViewHolder使用它。 如果我錯了請糾正我。 問題是,當我在onCreateViewHolder使用holder.getAdapterPosition ,它返回'-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;

}

因此,當我使用上面的代碼時,我得到的例外是索引超出范圍。 有什么辦法可以解決?

嘗試這個:

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

根據理想的解決方案,您應該在onBindViewHolder中編寫此代碼以使用“ getAdapterPosition”。

如果您只希望onCreateViewHolder中行的背景顏色與您可以嘗試的不同,則這將連續為您提供一個紅色行和另一個其他顏色行。

您需要創建一個全局變量。

布爾型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;

您可以為已放大的視圖設置顏色。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM