Android 如何通过编程更改listview项的背景颜色?

Android 如何通过编程更改listview项的背景颜色?,android,android-listview,Android,Android Listview,我有一个列表视图,我需要改变一个项目的背景颜色,例如项目2 我尝试使用这段代码,但它崩溃了,因为第三行给出了nullpointerexception,但是列表有11项!!!我不明白问题出在哪里 CalendarList = (ListView) findViewById(R.id.CalendarList); CalendarList.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, MyApplication

我有一个列表视图,我需要改变一个项目的背景颜色,例如项目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);
CalendarList=(ListView)findViewById(R.id.CalendarList);
CalendarList.setAdapter(新的ArrayAdapter(此,R.layout.list_项,MyApplication.roundMatches(CalendarPicker.getValue()));
CalendarList.getChildAt(2.setBackgroundColor)(0xFFFF0000);

问题在于ListView经过了高度优化,只创建了需要在屏幕上实际显示的视图。因此,对于尚未创建的行,getChildAt()将返回null。只需检查getChildAt()是否返回空值。如果第2行(在本例中)尚不存在,则在该行膨胀时(使用getView()、bindView()等)将创建该行。此时您可以设置适当的颜色。

您应该使用
setBackgroundResource(R.color.myRow\u red)
而不是setBackgroundColor()。在您的示例中,背景色是用ID指定的,而不是参考资料中描述的实际颜色。但是首先您应该检查
getChildAt()
是否为已创建的行返回null?在您应用
setBackgroundColor()

最后,这些解决方案都不起作用,我用了不同的方法,改变了文本的颜色,而不是背景的颜色

请将您的活动代码贴在摘录下面,我来看看。如何创建背景颜色?如何使用该资源生成xml?你能给我xml代码吗?那么,我必须把xml放在哪里#35000FFFF#80004488#ff000000#ffaaaaaaa#ffffffff和res/values/color中的这个XML文件(这里color.XML是包含上述元素的文件名,表示颜色名称和值)