我需要在ListView
中使用偶数行作为白色和奇数行sd灰色(使用ArrayAdapter
填充它)。我不能使用具有不同layouts
颜色的不同background
,因为如果我这样做,则选择不起作用。我所做的只是在getView()
中使用这段代码来检查行是奇数还是偶数并根据条件应用背景:
if (position % 2 == 0) {
convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.dark_item_background));}
但是这不能按预期工作,因为只有第一个可见行具有正确的背景颜色。滚动到底部后(我假设因为回收机制)我有非常奇怪的行为,不明白为什么。以下是我对第一项(正确的案例)的看法:
以下是滚动后的内容:
答案 0 :(得分:4)
在getView()
对象中重用以获得更好的性能。这就是为什么你会得到这种奇怪的行为。要解决您的问题,只需添加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));
}
答案 1 :(得分:1)
我认为你需要首先为任何重用的转换视图设置默认颜色,因为转换视图已经可以有深色背景。所以它会是这样的:
convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.light_item_background));
if (position % 2 == 0) {
convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.dark_item_background));
}
答案 2 :(得分: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));
}
答案 3 :(得分:1)
我认为你需要设置listview行的背景如下:
if (position % 2 == 0) {
convertView.setBackgroundDrawable(getResources()getDrawable(R.drawable.dark_item_background));
}
否则
{ convertView.setBackgroundDrawable(getResources()getDrawable(R.drawable.light_item_background));
}