如何以编程方式更改列表视图项的背景颜色?

时间:2011-07-23 00:54:15

标签: android android-listview

我有一个列表视图,我需要更改项目的背景颜色,例如项目2.

我尝试使用此代码,但它崩溃了,因为第三行给出了nullpointerexception,但列表中有11个项目!我不明白问题出在哪里

CalendarList = (ListView) findViewById(R.id.CalendarList);
CalendarList.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, MyApplication.roundMatches(CalendarPicker.getValue())));
CalendarList.getChildAt(2).setBackgroundColor(0xFFFF0000);

3 个答案:

答案 0 :(得分:0)

问题在于ListView经过高度优化,只能创建实际显示在屏幕上所需的视图。因此,对于尚未创建的行,getChildAt()将返回null。只需检查getChildAt()的null返回值。如果第2行(在这种情况下)尚不存在,则稍后将在行膨胀时创建它(使用getView(),bindView()等)。您可以在此时设置适当的颜色。

答案 1 :(得分:0)

您应该使用setBackgroundResource(R.color.myRow_red)而不是setBackgroundColor()。在您的示例中,背景颜色分配了ID而不是资源中描述的实际颜色。但首先你应该检查getChildAt()是否为已创建的行返回null?在应用setBackgroundColor()

之前

答案 2 :(得分:0)

最后这些解决方案都不起作用,我通过不同的方式做到了这一点,改变了文本的颜色而不是背景