更改影响第一项的列表视图中最后一项的颜色

Change the color of the last item in a list view affecting the first item

我正在尝试更改列表视图中最后一个项目的颜色,这很好,它工作正常,但是当我向后滚动时,列表视图的第一个项目也发生了变化,我不知道为什么会这样正在发生,这是我的代码:

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

        View vi = convertView;
        final ViewHolder holder;

        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            vi = inflater.inflate(R.layout.list_row_user, null);
            holder = new ViewHolder();
            holder.title = (TextView) vi.findViewById(R.id.text1);
            holder.icon = (ImageView) vi.findViewById(R.id.icon);

            vi.setTag(holder);
        } else {
            holder = (ViewHolder) vi.getTag();
        }

        holder.title.setText(lista[position]);

        if (position == lista.length -1) {

            holder.icon.setVisibility(View.VISIBLE);
            holder.title.setTextColor(0xFF999999);
            holder.title.setPadding(0, 20, 0, 0);

        }

        return vi;
    }


    public class ViewHolder {
        TextView title;
        ImageView icon;

    }

您还必须像下面一样添加 else 部分

if (position == lista.length -1) {

    holder.icon.setVisibility(View.VISIBLE);
    holder.title.setTextColor(0xFF999999);
    holder.title.setPadding(0, 20, 0, 0);

}else{   

    holder.title.setTextColor(otherColor);
}

发生这种情况的原因是列表项被回收,即,当您滚动浏览列表时,出于性能原因重复使用相同的项目对象(convertView != null 意味着之前膨胀和装饰的项目被重新-已使用并传递给您进行重新装修)。

这反过来意味着您不应依赖项目的任何默认属性,而应显式设置可能被任何其他项目更改的所有属性,如 .[=11 中所建议的那样=]