在动态列表视图中滚动时,备用颜色会更改其位置

时间:2015-09-07 07:41:08

标签: android listview adapter

if (convertView == null) {
            vh = new ViewHolder();
            convertView = inflater.inflate(R.layout.search_dtl_grid, parent, false);

        //  vh.llMain = (LinearLayout) convertView.findViewById(R.id.sdg_ll_main);
            if (pos % 2 == 0) {
                convertView.setBackgroundColor(Color.parseColor("#A4A4A4"));
            } else{
                convertView.setBackgroundColor(Color.parseColor("#FFFFFF"));
            }

我在适配器中尝试了上面的代码该列表带有替代颜色但是当我们向下滚动时颜色会改变它的位置,就像它们首先变成灰白色灰色白色但是在向上或向下滚动之后它会变成灰色灰色白色灰色像这样的白色白色,我已经搜索了这个很多解决方案,因为他们说要添加第二种颜色的其他部分我已经做过但仍然没有成功。请给我一个很好的解决方案。谢谢

1 个答案:

答案 0 :(得分:2)

当您在ViewHolder(您应该做的事情)中使用ListView模式时,您必须先了解它。

Android会重复使用您已夸大的观看次数。所以你必须区分两种情况:

  • 您使用的视图未充气
  • 您正在使用的视图是您已经充气并正在重复使用的视图

在第一种情况下,您必须为视图充气,创建ViewHolder并将其设置为视图标记。

在第二种情况下,您唯一需要做的就是恢复ViewHolder对象。

之后,使用ViewHolder。看看this example

在具体案例中,解决方案将类似于:

if (convertView == null) {
    inflateView(...);
    createViewHolder(...);
} else {
    recoverViewHolder(...);
}

if (pos % 2 == 0) {
    convertView.setBackgroundColor(Color.parseColor("#A4A4A4"));
} else{
    convertView.setBackgroundColor(Color.parseColor("#FFFFFF"));
}