ExpandableListView为每个空childItem添加额外+1项

时间:2013-10-23 14:45:34

标签: android for-loop arraylist expandablelistview

我遇到了一些逻辑问题,我无法理解如何修复它。

我有一个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);
}

结果是这样的:

Image of Bug here

正如你所看到的,有一大堆空子(Ive在适配器中将它们标记为“asd”)GroupItem下的项目,我不知道他们是如何到达那里的 - 他们似乎用+1扩展每个groupitem是空的或导致NPE。

感谢我能得到任何帮助

1 个答案:

答案 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将为每个组提供有效的整体。