在Android RecyclerView中如何更改备用行的颜色

时间:2017-09-09 06:47:15

标签: android android-recyclerview

我是android的新手,最近我学会了recyclerview,我想改变行的颜色。

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

我需要通过Adapter或MainActivity来更改它。 请帮帮我

6 个答案:

答案 0 :(得分:38)

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

将此代码放在适配器类中的OnBindViewHolder内。

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

答案 1 :(得分:4)

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

@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 :(得分:1)

我相信所有这些解决方案的一个问题是,在某些情况下不会调用onBindViewHolder。如果您使用notifyItemInserted(int position)之类的notify方法,则可能会以相同的颜色将行彼此堆叠在一起-不好。您将需要在所有其他项目上调用notifyItemChanged,以重新渲染与新位置相对应的背景颜色。

使用重新渲染所有方法notifyDataSetChanged()将解决此问题(但效率不如仅更新特定行),并且如果您在用户使用时不动态更改RecyclerAdapter的内容在屏幕上,则不会出现此问题。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

使用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))
    }

答案 5 :(得分: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")); 
}