我有一个列表视图,我需要更改项目的背景颜色,例如项目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);
答案 0 :(得分:0)
问题在于ListView经过高度优化,只能创建实际显示在屏幕上所需的视图。因此,对于尚未创建的行,getChildAt()将返回null。只需检查getChildAt()的null返回值。如果第2行(在这种情况下)尚不存在,则稍后将在行膨胀时创建它(使用getView(),bindView()等)。您可以在此时设置适当的颜色。
答案 1 :(得分:0)
您应该使用setBackgroundResource(R.color.myRow_red)
而不是setBackgroundColor()。在您的示例中,背景颜色分配了ID而不是资源中描述的实际颜色。但首先你应该检查getChildAt()
是否为已创建的行返回null?在应用setBackgroundColor()
答案 2 :(得分:0)
最后这些解决方案都不起作用,我通过不同的方式做到了这一点,改变了文本的颜色而不是背景