0

我遇到了一点逻辑问题,我无法理解如何解决它。

我有一个 ArrayList,我想通过读取参数 Day 将对象加载到 ExpListView 中,该参数由自定义 ArrayList 中的 get().getDay() 设置。

但是,当列表为空或可扩展列表视图中有多个子项时,此方法有效,它们的重复超出了我的理解。

该列表加载如下项目:

创建食谱集合()

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);
}
}

加载孩子

private void loadChild(ArrayList<ObjectFinder> rData) {
 for (ObjectFinder comparer : rData)
     childList.add(comparer);
}

结果是这样的:

错误的图像在这里

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

感谢我能得到的任何帮助

4

1 回答 1

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 个孩子,依此类推。

上面的代码将解决问题,但是我会删除您在适配器中的许多尝试捕获(因为这些是您将看到最多错误的地方,处理空情况不要只是忽略它们!!) . 我还将查看默认组列表为空而不是 null,这将解决上述问题,因为rCollection每个组都有一个有效的整体。

于 2013-10-23T15:39:03.467 回答