我试图更改ListView中某些项目的颜色。它崩溃了NullPointerException,我不确定为什么,我认为它是因为适配器没有创建/添加视图到ListView,所以它试图检索一个数组上没有的项目。只要列表中至少有一个项目,我就可以完美地添加彩色项目。我该如何解决这个问题?
int index = 0;
for(ItemEntry i: tentry) {
adapter.add(i.Name); // Adding to Adapter
adapter.notifyDataSetChanged(); // Telling it I've done so
long time = TimeUnit.MILLISECONDS.toDays(i.Date.getTime() - System.currentTimeMillis());
ListView stuff = (ListView) this.findViewById(R.id.contentsList);
if( time < 0 ) {
stuff.getChildAt(index).setBackgroundColor(Color.RED); // Null exception
} else if( time < 1 ) {
stuff.getChildAt(index).setBackgroundColor(Color.RED); // Null exception
} else if( time < 2 ) {
stuff.getChildAt(index).setBackgroundColor(Color.YELLOW); // Null exception
}
index++;
}
答案 0 :(得分:0)
不要通过索引覆盖孩子,以便像这样进行UI更改。它在乞求麻烦:
stuff.getChildAt(index).setBackgroundColor(Color.RED); // Null exception
相反,根据某些逻辑确定适配器的getView()中的项目视图,以确定哪些项目应具有什么背景颜色。
答案 1 :(得分:0)
您应该将此类逻辑放在适配器的getView方法中。 在那里,您可以根据其值修改项目的backgroundColor。
这个主题有很多主题。 例如,请看一下:How can I change the background color of list items based on the data being displayed in each item?