3

我需要在我的ListViewArrayAdapter用来填充它)中有偶数行作为白色和奇数行 sd gray。我不能使用layouts不同background颜色的不同,因为如果我这样做,选择不起作用。我所做的只是使用我的这段代码getView()来检查行是奇数还是偶数,并根据条件应用背景:

if (position % 2 == 0) {
convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.dark_item_background));}

但这并没有按预期工作,因为唯一的第一个可见行具有正确的背景颜色。滚动到底部后(我假设是因为回收机制),我的行为很奇怪,不明白为什么。这是我对第一项的内容(正确的情况):

在此处输入图像描述

这是滚动后的内容:

在此处输入图像描述

4

4 回答 4

4

IngetView()对象被重用以获得更好的性能。这就是为什么你会得到这种奇怪的行为。要解决您的问题,只需添加 if - else

if (position % 2 == 0) {
   convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.dark_item_background));
} else {
   convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.light_item_background));
}
于 2013-01-09T10:10:16.127 回答
1

我认为您需要首先为任何重用的转换视图设置默认颜色,因为转换视图已经可以有深色背景。所以它会是这样的:

convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.light_item_background));
if (position % 2 == 0) {
    convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.dark_item_background));
}
于 2013-01-09T10:07:25.440 回答
1

您还需要设置 ELSE 原因,否则由于重用机制,所有背景都会变黑。

if (position % 2 == 0) {
   convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.dark_item_background));
} else {
   convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.light_item_background));
}
于 2013-01-09T10:09:28.543 回答
1

我认为您需要将列表视图行的背景设置如下:

if (position % 2 == 0) {     

convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.dark_item_background));
}
else
{ convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.light_item_background));
}

于 2013-01-09T10:09:59.230 回答