在适配器中更改 listviewitem 背景颜色会产生意外结果

Changing listviewitem background color in adapter gives unexpected results

我正在从 ArrayList 填充 ListView,在适配器的 getView() 方法中,我试图根据显示的用户 属性 设置特定项目的背景颜色.

我在下面粘贴的代码在滚动列表视图时给出了意想不到的结果。 当我进入应用程序时,显示的第一个项目颜色正确,但当我滚动列表时,它把一些项目涂成绿色,尽管测试的 属性 是 0.

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

  User user = getItem(position);

  if (convertView == null) {
    convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_user, parent, false);
  }

  if (user.newStatus > 0) convertView.setBackgroundColor(Color.GREEN);

  //some other stuff happens here

  return convertView;
}

如果我没有解释清楚,即使 user.newStatus 为 0,一些 ListViewItems 无论如何都会变成绿色。

发生这种情况是因为 ListView's recycling mechanism

添加 else 案例,将修复它:

if (user.newStatus > 0) {
   convertView.setBackgroundColor(Color.GREEN);
} else {
   convertView.setBackgroundColor(yourDefaultColor);
}