反复设置recyclerview项目背景色

Set recyclerview item background color repeatedly

我正在尝试在 cardview 中设置不同的背景颜色,但它不起作用 我有包含 color

的颜色数组
public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.MyViewHolder> {
    private Context mContext;
    private List<String> leavetypeList;
    private List<String> leavebalanceList;

    public String[] mColors = {
            "3F51B5","FF9800","009688","673AB7"
    };


    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView leavecount,leavename;
        public ImageView thumbnail;
        public RelativeLayout rlauthor;
        CardView cardView;
        View viewline;

        public MyViewHolder(View view) {
            super(view);
            leavecount = (TextView)view.findViewById(R.id.tvleavenumber);
            leavename = (TextView)view.findViewById(R.id.tvleavetype);
            cardView=(CardView) view.findViewById(R.id.cdvdashboard);
        }
    }

    public DashboardAdapter(Context context, List<String> leavetypeList,List<String> leavebalanceList) {
        this.mContext = context;
        this.leavetypeList = leavetypeList;
        this.leavebalanceList = leavebalanceList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.raw_dashboard, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
        Typeface tf;
        tf = Typeface.createFromAsset(mContext.getAssets(), "fonts/HKNova-Medium.ttf");
        holder.leavecount.setTypeface(tf);
        holder.leavename.setTypeface(tf);

        holder.leavecount.setText(leavebalanceList.get(position));
        holder.leavename.setText(leavetypeList.get(position));

        String color="#"+mColors[position];

        for(int c=1;c<mColors.length;c++)
        {

            holder.cardView.setCardBackgroundColor(Color.parseColor(color));

            if(c==mColors.length)
            {
                 c=1;
            }
        }


    }

    @Override
    public int getItemCount() {
        return leavetypeList.size();
    }
}

我想要这种类型的输出,但只获取最后一种颜色,如果颜色完成而不显示其他项目背景颜色从颜色[0] 位置开始

任何帮助将不胜感激

在这种情况下,你匹配一些值然后像这样设置颜色.. 下面的代码添加到适配器 class..

   @Override
public void onBindViewHolder(ItemViewHolder holder, final int position) {
    // below code handle click event on recycler view item.
    final String data = mStringList.get(position);
    if (data=="RED")
    {
       // put your logic to set color into card view.
        holder.cardView.setBackgroundColor(Color.parseColor(color));
    }
    holder.textView.setText(data);
    holder.firstButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClick.getPosition(data); // shared data.
        }
    });



}

这样不行。您需要将此逻辑放在 onBindViewHolder 中,您可以在 position 的帮助下更改颜色。 使用喜欢

public String[] mColors = {"#3F51B5","#FF9800","#009688","#673AB7"};

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    holder.itemView.setBackgroundColor(Color.parseColor(mColors[position % 4])); // 4 can be replaced by mColors.length
}

看看我是如何重新定义带有 # 前缀的 mColors 数组的。所以计算颜色的时候需要加上#。