我遇到了一些逻辑问题,我无法理解如何修复它。
我有一个ArrayList,在这个ArrayList之外我想通过读取参数Day将对象加载到ExpListView中,该参数由自定义ArrayList中的get()。getDay()设置。
但是,当列表为空或可扩展列表视图中的多个childItem时,它们可以复制,这超出了我的理解范围。
该列表加载如下项目:
createrecipeCollection()
private void createRecipeCollection(){
for (int i = 0; i < rData.size(); i++) {
String weekday = rData.get(i).getDay();
if (weekday.equals("Monday")) {
loadChild(rData);
}
else if (weekday.equals("Tuesday"))
loadChild(rData);
else if (weekday.equals("Wednesday"))
loadChild(rData);
else if (weekday.equals("Thursday"))
loadChild(rData);
else if (weekday.equals("Friday"))
loadChild(rData);
else if (weekday.equals("Saturday"))
loadChild(rData);
else if (weekday.equals("Sunday"))
loadChild(rData);
else
loadChild(Empty);
recipeCollection.put(weekday, childList);
}
}
loadchild
private void loadChild(ArrayList<ObjectFinder> rData) {
for (ObjectFinder comparer : rData)
childList.add(comparer);
}
结果是这样的:
正如你所看到的,有一大堆空子(Ive在适配器中将它们标记为“asd”)GroupItem下的项目,我不知道他们是如何到达那里的 - 他们似乎用+1扩展每个groupitem是空的或导致NPE。
感谢我能得到任何帮助
答案 0 :(得分:2)
好的,这是修复
public int getChildrenCount(int groupPosition) {
List<ObjectFinder> group = rCollection.get(weekData.get(groupPosition));
if (group == null) return 0;
return group.size();
}
您遇到的问题是因为在rCollection.get(weekData.get(groupPosition))
返回null之前会捕获空指针异常,因为该组中没有条目,并且如果存在空指针异常,则返回groupPosition作为孩子的数量,所以第一组(索引0)没有孩子,第二组(索引1)有1个孩子等。
上面的代码将解决问题,但是我会删除你的适配器中的许多尝试捕获(因为那些你将看到最多的bug,处理null case不要只是忽略它们!!)。我还会查看默认组清单是否为空而不是空,这将解决上述问题,因为rCollection
将为每个组提供有效的整体。