如何在RecyclerView中更改单个项目的颜色?

时间:2017-03-21 09:40:22

标签: java android android-recyclerview

我在RecyclerView中为项目的资源设置颜色时遇到问题。 我尝试过这两种方法但没有效果。我有什么想法吗?

holder.alert.setTextColor(R.color.alertGreen);
holder.alert.setTextColor(getResources().getColor(R.color.alertGreen));

5 个答案:

答案 0 :(得分:7)

使用ContextCompat获取颜色。

holder.alert.setTextColor(ContextCompat.getColor(context, R.color.alertGreen));

答案 1 :(得分:1)

onBindViewHolder(RecyclerView.ViewHolder holder, int position)方法中,您可以更改当前元素颜色:

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    holder.alert.setTextColor(R.color.alertGreen);
    holder.alert.setTextColor(getResources().getColor(R.color.alertGreen);
}

使用ContextCompat获取颜色:

ContextCompat.getColor(context, R.color.alertGreen));

答案 2 :(得分:1)

您应该使用ContextCompact代替getResources(),因为此方法为deprecated

holder.alert.setTextColor(ContextCompat.getColor(context, R.color.red));

答案 3 :(得分:1)

要更新单个项目的颜色,您可以按照以下技术进行操作,

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

// Green color to set to specific item in the view [By referencing the position you need to handle the view]
int color1 = ContextCompat.getColor(context, R.color.alertGreen));

// Red color to set to remaining Views
int color2 = ContextCompat.getColor(context, R.color.alertRed));

     if (position == 1) {
       holder.alert.setTextColor(color1);
     } else {
       holder.alert.setTextColor(color2);
     }
}

答案 4 :(得分:0)

使用ContextCompat的另一种方法是:

holder.alert.setTextColor(context.getResources().getColor(R.color.alertGreen));