ListView自定义背景颜色

时间:2013-01-09 10:03:55

标签: android listview

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

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

但是这不能按预期工作,因为只有第一个可见行具有正确的背景颜色。滚动到底部后(我假设因为回收机制)我有非常奇怪的行为,不明白为什么。以下是我对第一项(正确的案例)的看法:

enter image description here

以下是滚动后的内容:

enter image description here

4 个答案:

答案 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));
  }