更改ListView中第一项的背景颜色

时间:2012-12-08 20:54:22

标签: android listview colors android-listview

我的listview有一个自定义适配器:

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



    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new DataHolder();
        holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
        holder.locationName = (TextView)row.findViewById(R.id.locationName);
        holder.locationElevation = (TextView)row.findViewById(R.id.lcoationElevation);
        holder.locationDistance = (TextView)row.findViewById(R.id.locationDistance);
        row.setTag(holder);
    }
    else
    {
        holder = (DataHolder)row.getTag();
    }

    Data data = gather[position];
    holder.locationName.setText(data.locationName);
    holder.locationElevation.setText(data.locationElevation);
    holder.locationDistance.setText(Double.toString(data.heading));
    holder.imgIcon.setImageBitmap(data.icon);



    return row;
}

我的列表视图中填充了项目,我只想让第一个项目具有红色背景颜色。当我滚动所有其他项目时仍保留自己的颜色,但第一项仍然是红色。有任何想法吗?每当我尝试某些东西时,当我滚动时,红色背景会移动到其他行。

1 个答案:

答案 0 :(得分:10)

  

每当我尝试某些东西时,当我滚动时,红色背景会移动到其他行。

我猜你没有else条款。适配器重用每个行布局以节省资源。因此,如果您更改布局中的值,它将在下一次回收此特定布局时继续运行。只需添加一个else语句,将回收的View返回到它的默认状态:

if(position == 0)
    row.setBackgroundColor(Color.RED);
else
    row.setBackgroundColor(0x00000000); // Transparent

(如果背景是特定颜色,而不是透明,则需要更改该值。)