我试图改变列表视图中我最后一个项目的颜色,这很好,它正在工作,但是当我向后滚动列表视图的第一项时也会改变,我不会# 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;
}
答案 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中所示。