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

时间:2015-09-15 12:32:19

标签: android listview android-listview android-arrayadapter baseadapter

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

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

    }

2 个答案:

答案 0 :(得分:1)

您还必须添加其他部分,如下所示

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

答案 1 :(得分:1)

发生这种情况的原因是列表项被回收,即,当您滚动列表时,出于性能原因重新使用相同的项目对象(convertView!= null表示重新使用先前充气和装饰的项目并传递给你重新装修)。

这反过来意味着您不应该依赖项目的任何默认属性,而是明确设置所有可能已被任何其他项目更改的属性,如@uday's answer中所示。