如何在ListView中基于字符串值设置setTextColor?

时间:2018-06-21 21:09:05

标签: java android listview

我想基于字符串 STATUS 设置textview的文本颜色。

如果状态 = 红色,则文本应为红色;如果状态 = 绿色,则文本应为绿色。我已经尝试了许多解决方案,但仍然无法设置颜色...

这是我的代码:

适配器

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewItem viewItem = null;

    if (convertView == null) {
        viewItem = new ViewItem();
        LayoutInflater layoutInfiater = (LayoutInflater) this.context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = layoutInfiater.inflate(R.layout.listview_items, null);
        viewItem.tvDescription = (TextView) convertView.findViewById(R.id.tv_description);
        viewItem.tvDate = (TextView) convertView.findViewById(R.id.tv_date);
        viewItem.tvPoints = (TextView) convertView.findViewById(R.id.tv_points);
        viewItem.tvStatus = (TextView) convertView.findViewById(R.id.tv_status);
        TextView tvpkt = (TextView) convertView.findViewById(R.id.tv_points);
        TextView tvstatus = (TextView) convertView.findViewById(R.id.tv_status);

        String status = tvstatus.getText().toString();

        if (status.equals("Red")) {
            tvpkt.setTextColor(Color.RED);
        } else if (status.equals("Green")) {
            tvpkt.setTextColor(Color.GREEN);
        }
        convertView.setTag(viewItem);
    } else {
        viewItem = (ViewItem) convertView.getTag();
    }


    viewItem.tvDescription.setText(valueList.get(position).Description);
    viewItem.tvDate.setText(valueList.get(position).Date);
    viewItem.tvPoints.setText(valueList.get(position).Points);
    viewItem.tvStatus.setText(valueList.get(position).Status);

    return convertView;
}

2 个答案:

答案 0 :(得分:4)

我认为String status稍后与if-statement中的条件不符。

跳过字符串区分大小写的一种方法是使用equalsIgnoreCase,它基本上比较两个字符串,而忽略大小写考虑。

类似这样的东西:

if(status.equalsIgnoreCase("Red")){
   tvpkt.setTextColor(Color.RED);
}
else if(status.equalsIgnoreCase("Green")){
   tvpkt.setTextColor(Color.GREEN);
}

另一种方法是在比较之前使用toUpperCase()方法将status大写,如下所示:

String status = tvstatus.getText().toString().toUpperCase;

然后将其与大写版本的字符串进行比较:

if(status.equals("RED")){
   tvpkt.setTextColor(Color.RED);
}
else if(status.equals("GREEN")){
   tvpkt.setTextColor(Color.GREEN);
}

答案 1 :(得分:0)

您的代码没问题,只是顺序错误。同样,在convertview为null的情况下,仅应执行视图膨胀和视图所有者创建。像这样修改您的代码

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewItem viewItem = null;

if(convertView == null)
{
    viewItem = new ViewItem();

    LayoutInflater layoutInfiater = (LayoutInflater)this.context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    convertView = layoutInfiater.inflate(R.layout.listview_items, null);



    viewItem.tvDescription= (TextView)convertView.findViewById(R.id.tv_description);
    viewItem.tvDate= (TextView)convertView.findViewById(R.id.tv_date);
    viewItem.tvPoints= (TextView)convertView.findViewById(R.id.tv_points);
    viewItem.tvStatus= (TextView)convertView.findViewById(R.id.tv_status);

    convertView.setTag(viewItem);
}

else
{
    viewItem = (ViewItem) convertView.getTag();
}


viewItem.tvDescription.setText(valueList.get(position).Description);
viewItem.tvDate.setText(valueList.get(position).Date);
viewItem.tvPoints.setText(valueList.get(position).Points);
viewItem.tvStatus.setText(valueList.get(position).Status);


TextView tvpkt = (TextView)convertView.findViewById(R.id.tv_points);

String status= viewItem.tvstatus.getText().toString();

if(status.equalsIgnoreCase("Red"))
{
    tvpkt.setTextColor(Color.RED);
}
else if(status.equalsIgnoreCase("Green"))
{
    tvpkt.setTextColor(Color.GREEN);
}


return convertView;
}