如何为 RecyclerViews 的 GridLayoutManager 中的每个项目设置不同的颜色

How to set different color for each items in RecyclerViews' GridLayoutManager

我已经实现了 GridLayoutManager,它运行良好。我使用 CardView 作为项目布局。

GridLayoutManager 的屏幕截图:

我只想为列表中的前五个项目设置不同的颜色,并为接下来的五个项目重复相同的颜色。例如,如果我的列表包含 10 个项目,那么前五个项目有不同的颜色假设红色、绿色、蓝色、黄色、粉红色,然后从项目 6 - 10 这些相同的颜色应该设置为背景颜色。我尝试使用 setCardBackgroundColor(Color.parseColor("#FF6363")) 设置 CardView 背景颜色。但这只会更改所有项目的背景颜色。有什么办法可以给物品设置不同的颜色吗?

@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.device_card, parent, false);
    CardView dc = view.findViewById(R.id.cardViewCard);
    dc.setCardBackgroundColor(Color.parseColor("#FF6363"));

    return new ViewHolder(view);
}

您必须在 onBindViewHolder 中更改它。

我认为这段代码可能对你有用,只需使用你的位置模数加 1 除以 5 的开关,然后在每种情况下,你都可以将你想要的颜色设置为背景。

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {

    switch((position+1)%5) {
        case 0: 
            dc.setCardBackgroundColor(Color.parseColor("#Color5"));
            break;
        case 1:
            dc.setCardBackgroundColor(Color.parseColor("#Color1"));
            break;
        case 2:
            dc.setCardBackgroundColor(Color.parseColor("#Color2"));
            break;
        case 3:
            dc.setCardBackgroundColor(Color.parseColor("#Color3"));
            break;
        case 4:
            dc.setCardBackgroundColor(Color.parseColor("#Color4"));
    }
}

要使用运行时生成的随机颜色,您可以这样做。

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
        Random rand = new Random();
        Int red = rand.nextInt(255 - 1)
        Int green = rand.nextInt(255 - 1)
        Int  blue = rand.nextInt(255 - 1)
        dc.setCardBackgroundColor(Color.argb(1,red,green,blue));
}

更新

Random rand = new Random(); //declare this in adapter class, instead of creating multiple times do it once

@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.device_card, parent, false);
    CardView dc = view.findViewById(R.id.cardViewCard);
            Int red = rand.nextInt(255 - 1)
            Int green = rand.nextInt(255 - 1)
            Int  blue = rand.nextInt(255 - 1)
            dc.setCardBackgroundColor(Color.argb(1,red,green,blue));
            return new ViewHolder(view);
}

这将为视图设置随机颜色,并且当您滚动内容时 颜色不会改变,因为 onCreateViewHolder 为每个视图调用一次,而 onBindViewHolder 在内容滚动时调用多次