3

我的列表视图有一个自定义适配器:

    @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;
}

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

4

1 回答 1

10

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

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

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

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

于 2012-12-08T20:56:36.923 回答