在适配器中更改 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);
}
我正在从 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);
}