我的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;
}
我的列表视图中填充了项目,我只想让第一个项目具有红色背景颜色。当我滚动所有其他项目时仍保留自己的颜色,但第一项仍然是红色。有任何想法吗?每当我尝试某些东西时,当我滚动时,红色背景会移动到其他行。
答案 0 :(得分:10)
每当我尝试某些东西时,当我滚动时,红色背景会移动到其他行。
我猜你没有else条款。适配器重用每个行布局以节省资源。因此,如果您更改布局中的值,它将在下一次回收此特定布局时继续运行。只需添加一个else语句,将回收的View返回到它的默认状态:
if(position == 0)
row.setBackgroundColor(Color.RED);
else
row.setBackgroundColor(0x00000000); // Transparent
(如果背景是特定颜色,而不是透明,则需要更改该值。)