使用自定义适配器的listview中的android更改列表项

时间:2014-09-29 10:48:27

标签: android listview colors adapter

我想从列表视图中更改背景颜色。 数字的背景应按状态

更改
1 = red
2 = grey
3 = green
4 = yellow

这是我的自定义适配器中的代码(不起作用):

TextView number = (TextView) rowView.findViewById(R.id.tv_number);

switch(Integer.parseInt(status[position])){
case 1: number.setBackgroundColor(0xff0000);
        break;

case 2: number.setBackgroundColor(0xdfdfdf);
        break;

case 3: number.setBackgroundColor(0x00ff00);
        break;

case 4: number.setBackgroundColor(0xffff00);
        break;

default :
        break;
}

为什么它不起作用?

7 个答案:

答案 0 :(得分:2)

当您为小部件设置背景时,您还需要将Alpha通道添加到您希望使用的颜色,因为Android要求颜色采用 #ARGB 格式,例如#AARRGGBB,其中 A 是Alpha通道, RGB 是红绿蓝。

因此,在您的情况下,如果您想要透明( 00 前缀)Alpha通道,那么您需要为案例1 执行此操作:

number.setBackgroundColor(0x00ff0000);

或者,对于不透明通道( ff 前缀),请执行以下操作:

number.setBackgroundColor(0xffff0000);

答案 1 :(得分:1)

int cc[] = {R.color.red,r.color.blue}

将getview方法中textview的背景设置为

number.setBackgroundColor(cc[position]);

答案 2 :(得分:1)

试试这个;用这个替换你的代码。

TextView number = (TextView) rowView.findViewById(R.id.tv_number);

    switch(Integer.parseInt(status[position])){
    case 1: number.setBackgroundColor(Color.RED);
            break;

    case 2: number.setBackgroundColor(Color.GRAY);
            break;

    case 3: number.setBackgroundColor(Color.GREEN);
            break;

    case 4: number.setBackgroundColor(Color.YELLOW);
            break;

    default :
            break;
    }

答案 3 :(得分:1)

您的状态[位置]值是否正确? 您可以编写Log statemet来检查值或调试代码。

如果您的值正确无误,请尝试以下代码段。

TextView number = (TextView) rowView.findViewById(R.id.tv_number);

switch(Integer.parseInt(status[position])){
case 1: number.setBackgroundColor(Color.parseColor("#FF0000"));
        break;

case 2: number.setBackgroundColor(Color.parseColor("#4D4D4D"));
        break;

case 3: number.setBackgroundColor(Color.parseColor("#00FF00"));
        break;

case 4: number.setBackgroundColor(Color.parseColor("#FFFF00"));
        break;

default :
        break;
}

希望得到这个帮助。

答案 4 :(得分:0)

你的状态函数返回什么,rowView是什么?没有多说就很难说。

其他一些建议:

您应该避免像这样的硬编码值,最好在re / values /文件夹中使用colors.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="primary_white">#ffffff</color>
</resources>

然后以与字符串相同的方式引用您的资源,但是R.color.primary_white

这样的魔术数字也是不好的做法。尝试在文件顶部设置一些静态值:

static int STATUS_RED = 1;

...

case STATUS_RED:

这是一个关于在列表视图中更改背景和样式行的教程:

http://webdeveloperpadawan.blogspot.co.uk/2014/09/android-listview-with-differing-rows.html

答案 5 :(得分:0)

试试这个 -

TextView number = (TextView) rowView.findViewById(R.id.tv_number);

switch(position+1){
case 1: number.setBackgroundColor(Color.RED);
        break;

case 2: number.setBackgroundColor(Color.GRAY);
        break;

case 3: number.setBackgroundColor(Color.GREEN);
        break;

case 4: number.setBackgroundColor(Color.YELLOW);
        break;

default :
        break;
}

答案 6 :(得分:0)

在getView方法中使用此代码..

        @Override
        public View getView(int position, View convertView, ViewGroup parent) { 

        switch (position % 4) {
                case 0:
                    convertView.setBackgroundColor(Color.RED);
                    break;
                case 1:
                    convertView.setBackgroundColor(Color.GREY);
                    break;
                case 2:
                    convertView.setBackgroundColor(Color.GREEN);
                    break;
                case 3:
                    convertView.setBackgroundColor(Color.YELLOW);
                    break;
                default:
                    break;
                }
    }

希望它能帮助......