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

时间:2016-01-18 18:57:15

标签: android android-listview listviewitem listview-adapter

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

下面粘贴的代码在滚动列表视图时给出了意想不到的结果。 当我进入应用程序时,显示的第一个项目正确着色,但是当我滚动列表时,它会将一些项目的颜色设置为绿色,尽管测试属性为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,SOME ListViewItems也会变为绿色。

1 个答案:

答案 0 :(得分:1)

这是因为ListView's recycling mechanism

添加else案例,将解决它:

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