这是您问题的答案。
众所周知,ListView 重用 converView 并在重用视图中显示新值。因此,每当您向上或向下滚动 ListView 时,从屏幕上消失的 listItems 都会与刚刚出现在屏幕上的新 listItems 一起重用。
因此,当您将背景颜色添加到具有绿色之类的某些列表项时,当它从屏幕上消失并重新用于新列表项时,它的背景颜色已经为绿色,因此新项目也将获得绿色背景,并且您滚动的速度也一样快向上和向下列出最终所有项目都变为绿色。
还有一件事总是给您的 ListView 提供固定高度,例如 fill_Parent 或 500dp 之类的东西,因为当 getView() 开始绘制项目时,它将计算前三个列表项的大小,然后计算具有列表视图高度的其余项目的大小。
所以我在这种情况下所做的是,默认情况下我给每个视图一个透明的颜色,然后应用我的逻辑使其变为其他颜色。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Holder holder;
if (convertView == null){
holder = new Holder();
convertView = View.inflate(context, R.layout.item, null);
holder.txtID = (TextView) convertView.findViewById(R.id.text);
holder.txtName = (TextView) convertView.findViewById(R.id.text2);
convertView.setTag(holder);
}else{
holder = (Holder) convertView.getTag();
}
convertView.setBackgroundColor(Color.TRANSPARENT);
if (Integer.parseInt( setter.get(position).getId() ) % 3 == 0 ){
convertView.setBackgroundColor(Color.GREEN);
}
if (Integer.parseInt( setter.get(position).getId() ) % 2 == 0 ){
convertView.setBackgroundColor(Color.YELLOW);
}
holder.txtID.setText(setter.get(position).getId());
holder.txtName.setText(setter.get(position).getName());
return convertView;
}