【问题标题】:ExpandableListView adds +1 Item extra per empty childItemExpandableListView 为每个空 childItem 添加 +1 Item
【发布时间】:2013-11-01 22:07:48
【问题描述】:

我遇到了一点逻辑问题,我不明白如何解决它。

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

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

列表加载项目如下:

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

加载子

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

结果是这样的:

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

感谢我能得到的任何帮助

【问题讨论】:

  • 如果您在调试器中查看子列表,您会看到什么?有多余的空孩子吗?或者它们是由适配器创建的?您的适配器的实现也可能会有所帮助。
  • 我添加了适配器。它在调试器中没有给我任何合乎逻辑的东西(我能看到的)。我认为 createRecipeCollection() 有问题 - 但我终其一生都无法弄清楚。

标签: android for-loop arraylist expandablelistview


【解决方案1】:

好的,这里是修复

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

【讨论】:

  • 哇,坦克 Eluvatar。我一回家就试试看。
  • 再次感谢您十亿。希望我能多给你一千倍的票。我听到你在说什么,最好处理空异常然后尝试忽略它们。我又学到了很多。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 2012-05-11
  • 1970-01-01
相关资源
最近更新 更多