Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 交替颜色在动态列表视图中滚动时更改其位置_Android_Listview_Adapter - Fatal编程技术网

Android 交替颜色在动态列表视图中滚动时更改其位置

Android 交替颜色在动态列表视图中滚动时更改其位置,android,listview,adapter,Android,Listview,Adapter,我在适配器中尝试了上述代码,列表中出现了其他颜色,但当我们向下滚动时,颜色会改变其位置,就像第一次出现灰白色,但在向上或向下滚动后,会出现灰白色,我已经搜索了很多解决方案,他们说要为第二种颜色添加其他部分,我已经这样做了,但仍然没有成功。请给我一个好的解决方案。谢谢当您在列表视图中使用ViewHolder模式时(您应该做的事情),您必须首先理解它 Android会重用您已经膨胀的视图。因此,您必须区分两种情况: 您正在使用的视图未充气 您正在使用的视图是您已经膨胀并正在重新使用的视图 在第一

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

当您在
列表视图中使用
ViewHolder
模式时(您应该做的事情),您必须首先理解它

Android会重用您已经膨胀的视图。因此,您必须区分两种情况:

  • 您正在使用的视图未充气
  • 您正在使用的视图是您已经膨胀并正在重新使用的视图
在第一种情况下,必须对视图进行充气,创建一个
ViewHolder
,并将其设置为视图的标记

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

之后,使用
视图夹
。看一看

在您的具体案例中,解决方案如下:

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

将您的条件置于外部if语句之外
“当您在ListView中使用ViewHolder模式(您应该做的事情)时,您必须首先了解它。”
视图持有者模式并不那么重要,但在大多数情况下,人们在实现它时会遇到问题,请注意,标准的google适配器都没有使用视图持有者模式(是的:扩展
BaseAdapter
的5个适配器类中没有一个不使用视图持有者模式)如果你关心优化你的应用程序,这一点很重要。这是真的:谷歌的适配器中没有一个使用它。但随着
RecyclerView
的添加,游戏发生了变化。;)我们正在谈论
ListView
对吗?
ListView
中的视图持有者模式99%无用,只会使代码更加复杂,而不会添加anything@Dr.pelocho.. 我对你说的话有一点了解,但没有完全理解。。。。我可以将完整的适配器代码发送到这里。。那么你能告诉我在哪里做改变吗。。谢谢你的帮助是的,我们正在谈论
ListView
。实现视图持有者模式并不一定会使代码更加复杂。这只是一个如何编写代码的问题。关于模式是无用的。。。我不同意。让我们看看是什么
if (convertView == null) {
    inflateView(...);
    createViewHolder(...);
} else {
    recoverViewHolder(...);
}

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