在动态列表视图中滚动期间,替代颜色会更改其位置

Alternate color changes its position during scrolling in dynamic listview

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"));
            }

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

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

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"));
}