我是android的新手,最近我学会了recyclerview
,我想改变行的颜色。
示例:我有10行,我想要改变颜色,如5行蓝色和5行红色。备用行颜色应该是这样。
我需要通过Adapter或MainActivity来更改它。 请帮帮我
答案 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"));
}