【问题标题】:Change Background color of first item in ListView更改 ListView 中第一项的背景颜色
【发布时间】:2026-02-23 18:00:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: android listview colors android-listview


    【解决方案1】:

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

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

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

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

    【讨论】:

    • Oo @Sam 你真是个天才