在Android RecyclerView中如何更改交替行的颜色

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

我是android新手,最近我学会了

recyclerview
并且我想更改行的颜色。

示例:我有 10 行,我想更改颜色,例如 5 行蓝色和 5 行红色。备用行颜色应该是这样的。

我必须通过 Adapter 或 MainActivity 来更改它。 请帮助我

android android-recyclerview
6个回答
65
投票

您可以通过在 Adapter 类中添加以下代码来更改备用行的颜色。 您还可以使用此代码更改行的图像。

将此代码放入适配器类中的

OnBindViewHolder
中。

JAVA:

 if(position %2 == 1)
    {
        holder.itemView.setBackgroundColor(Color.parseColor("#FFFFFF"));
        //  holder.imageView.setBackgroundColor(Color.parseColor("#FFFFFF"));
    }
    else
    {
       holder.itemView.setBackgroundColor(Color.parseColor("#FFFAF8FD"));
       //  holder.imageView.setBackgroundColor(Color.parseColor("#FFFAF8FD"));
    }

科特林:

if (position % 2 == 1)
 {
  holder.itemView.setBackgroundColor(Color.parseColor("#FFFFFF"))
  //  holder.imageView.setBackgroundColor(Color.parseColor("#FFFFFF"))
 } 
 else 
 {
  holder.itemView.setBackgroundColor(Color.parseColor("#FFFAF8FD"))
  // holder.imageView.setBackgroundColor(Color.parseColor("#FFFAF8FD"))
 }

6
投票

在适配器的 onBindViewHolder 中,只需获取位置并检查它是偶数还是奇数。如果是偶数,请将布局的背景颜色设置为红色,否则为蓝色

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

    if(position%2 == 0){
        viewHolder.containerLayout.setBackgroundColor(R.color.RED);
    } else {
        viewHolder.containerLayout.setBackgroundColor(R.color.BLUE);

    }}

2
投票

我相信所有这些解决方案的一个问题是在某些情况下不会调用

onBindViewHolder
。如果您使用像
notifyItemInserted(int position)
这样的通知方法,您可能会将具有相同颜色的行堆叠在一起 - 不好。您需要在每个其他项目上调用
notifyItemChanged
来重新渲染与新位置相对应的背景颜色。

使用重新渲染所有方法

notifyDataSetChanged()
将解决此问题(但效率低于仅更新特定行),并且如果用户在屏幕上时不动态更改
RecyclerAdapter
的内容,则不会有这个问题。


2
投票

在 Kotlin 中使用 CardView

 internal fun bind(d: Detalle, position: Int, listener: OnItemClickListener) {

        if (position % 2 == 1) {
            cardViewPrincipal.setCardBackgroundColor(ContextCompat.getColor(itemView.context, R.color.blue_logo))
        } else {
            cardViewPrincipal.setCardBackgroundColor(ContextCompat.getColor(itemView.context, R.color.colorWhite))
        }

多种颜色

when {
p % 4 == 0 -> cardViewPrincipal.setCardBackgroundColor(ContextCompat.getColor(itemView.context, R.color.yellow)) 
p % 4 == 1 -> cardViewPrincipal.setCardBackgroundColor(ContextCompat.getColor(itemView.context, R.color.green)) 
p % 4 == 2 -> cardViewPrincipal.setCardBackgroundColor(ContextCompat.getColor(itemView.context, R.color.blue)) 
p % 4 == 3 -> cardViewPrincipal.setCardBackgroundColor(ContextCompat.getColor(itemView.context, R.color.red)) 
}

1
投票

使用 Kotlin

    if (position % 2 == 1) {
        holder?.itemView?.setBackgroundColor(context.resources.getColor(R.color.text_gray))
    } else {
        holder?.itemView?.setBackgroundColor(context.resources.getColor(R.color.white))
    }

0
投票

这是一个解决方案:

LinearLayout ll_search =(LinearLayout)convertView.findViewById(R.id.ll_search);

if(position %2 == 1) {
  ll_search.setBackgroundColor(Color.parseColor("#FFFFFF")); 
} else { 
  ll_search.setBackgroundColor(Color.parseColor("#d3d3d3")); 
}
© www.soinside.com 2019 - 2024. All rights reserved.