簡體   English   中英

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

[英]In Android RecyclerView How to change the color of Alternate rows

我是 android 新手,最近我學習了recyclerview ,我想更改行的顏色。

示例:我有 10 行,我想更改顏色,例如 5 行藍色和 5 行紅色。備用行顏色應該是這樣的。

我必須從哪里通過適配器或 MainActivity 更改它。 請幫幫我

您可以通過在 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"));
    }

在適配器的 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);

    }}

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

我相信所有這些解決方案的一個問題是在某些情況下不會調用onBindViewHolder 如果您使用諸如notifyItemInserted(int position)類的通知方法,您可能會將行以相同的顏色堆疊在一起 - 不好。 您需要對每個其他項目調用notifyItemChanged以重新呈現與新位置對應的背景顏色。

使用 re-render all 方法notifyDataSetChanged()將解決這個問題(但比只更新特定行效率低),並且如果您沒有在用戶在屏幕上時動態更改RecyclerAdapter的內容,您將不會有這個問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM