我是android新手,最近我学会了
recyclerview
并且我想更改行的颜色。
示例:我有 10 行,我想更改颜色,例如 5 行蓝色和 5 行红色。备用行颜色应该是这样的。
我必须通过 Adapter 或 MainActivity 来更改它。 请帮助我
您可以通过在 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"))
}
在适配器的 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);
}}
我相信所有这些解决方案的一个问题是在某些情况下不会调用
onBindViewHolder
。如果您使用像 notifyItemInserted(int position)
这样的通知方法,您可能会将具有相同颜色的行堆叠在一起 - 不好。您需要在每个其他项目上调用 notifyItemChanged
来重新渲染与新位置相对应的背景颜色。
使用重新渲染所有方法
notifyDataSetChanged()
将解决此问题(但效率低于仅更新特定行),并且如果用户在屏幕上时不动态更改 RecyclerAdapter
的内容,则不会有这个问题。
在 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))
}
使用 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))
}
这是一个解决方案:
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"));
}