Android ListView背景颜色变化取决于值(逻辑)未定位或选择

时间:2014-05-12 15:57:32

标签: android listview

我正在尝试显示一个信息列表,我想为ListView中的每个项目/行提供不同的背景颜色。我可以改变每一行的背景颜色,但不能改变每一行的颜色。我尝试使用多个非嵌套的if语句来设置背景颜色,但我不起作用。

public View getView(int position, View convertView, ViewGroup parent) 
    {
        ViewGroup listItem;
        if(convertView == null)
        {
            listItem = (ViewGroup) getLayoutInflator().inflate(R.layout.list_item, null);
        }
        else
        {
            listItem = (ViewGroup) convertView;
        }

        //listItem.setClickable(true);
        //listItem.setOnClickListener(ViewBeerCL);
        listItem.setTag(getParent());
        String[] gradeInfo = gradeList.get(position).split(":");
        TextView gradeTV = (TextView) listItem.findViewById(R.id.gradeTV);
        TextView highGradeTV = (TextView) listItem.findViewById(R.id.highGradeTV);
        TextView lowGradeTV = (TextView) listItem.findViewById(R.id.lowGradeTV);

        String GradeLayoutStyle = gradeInfo[0];
        String aStr = gradeList.get(position).substring(1, 1);
        String bStr = "A";

        gradeTV.setText(gradeInfo[0]);
        highGradeTV.setText(gradeInfo[1]);
        lowGradeTV.setText(gradeInfo[2]);
        gradeTV.setBackgroundColor((gradeInfo[0] == bStr)? Color.TRANSPARENT:getResources().getColor(R.color.GradeA));
        highGradeTV.setBackgroundColor((gradeInfo[0] == bStr)? Color.TRANSPARENT:getResources().getColor(R.color.GradeA));
        lowGradeTV.setBackgroundColor((gradeInfo[0] == bStr)? Color.TRANSPARENT:getResources().getColor(R.color.GradeA));

        if(gradeTV.getText() == bStr)
        {
            SetColor(gradeTV, highGradeTV, lowGradeTV, getResources().getColor(R.color.GradeA), gradeInfo, "A");
        }
        if(GradeLayoutStyle == "B")
        {
            SetColor(gradeTV, highGradeTV, lowGradeTV, getResources().getColor(R.color.GradeB), gradeInfo, "B");
        }
        if(GradeLayoutStyle == "C")
        {
            SetColor(gradeTV, highGradeTV, lowGradeTV, getResources().getColor(R.color.GradeC), gradeInfo, "C");
        }
        if(GradeLayoutStyle == "D")
        {
            SetColor(gradeTV, highGradeTV, lowGradeTV, getResources().getColor(R.color.GradeD), gradeInfo, "D");
        }
        if(GradeLayoutStyle == "F")
        {
            SetColor(gradeTV, highGradeTV, lowGradeTV, getResources().getColor(R.color.GradeF), gradeInfo, "F");
        }

        return listItem;
    }

    private void SetColor(TextView grade, TextView high, TextView low, int color, String[] gradeInfo, String letter)
    {
        grade.setBackgroundColor((gradeInfo[0] == letter)? Color.TRANSPARENT:color);
        high.setBackgroundColor((gradeInfo[0] == letter)? Color.TRANSPARENT:color);
        low.setBackgroundColor((gradeInfo[0] == letter)? Color.TRANSPARENT:color);
    }

是的,这是为了完成家庭作业,我不是在寻找有人为我做这项工作,我正在寻找帮助/告诉我如何解决这个问题的人。如果有人能指出我正确的方向,或者让我知道这是否可能,那就太棒了!

谢谢,

肖恩

1 个答案:

答案 0 :(得分:0)

需要使用string.eqals(otherString)进行字符串比较。 使用==将无法工作,因为它比较对象本身,而不是内容。