HashMap迭代仅显示最后一个元素

时间:2013-11-30 17:55:56

标签: android expandablelistview

我正在尝试使用来自数据库的数据实现可扩展的列表视图。我已经尝试在代码中添加数据并且它有效,所以我现在尝试从数据库中获取动态数据填充listview。

数据分为两类,主要类别和成员。例如,如果主要类别是水果,它的成员可能包括芒果,鳄梨,苹果等。如果是动物,它可能有马,鹰,鲨鱼。数据总是成对出现,例如Animal,Horses;动物,鹰;水果,苹果。可扩展列表视图应显示为:

动物

- 马匹

- 鹰

水果

- 苹果

我的代码已经可以确定主要组,因此标题已经显示了Fruit和Animal的主要分组。使用

group_member.put(family_name, member_name); 

我将会员链接到主要类别。我现在的问题是如何编写迭代代码以将成员分组到主类别。到目前为止,我已经尝试使用基于stackoverflow中给出的示例代码的迭代器以及其他站点,但是只显示每个组的最后一个元素。我也试过使用for-each loop bur仍然没有成功。

String json = jsonParser.makeHttpRequest(URL_COMPONENTS, "POST", params);
JSONArray components = null;
ArrayList<HashMap<String, String>> componentList;
List<String> main_group = new ArrayList<String>();
HashMap<String, String> group_member = new HashMap<String, String>();

try {
  components = new JSONArray(json);

  if (components != null) {
    for (int i = 0; i < components.length(); i++) {
      JSONObject c = components.getJSONObject(i);

      String family_name = c.getString(TAG_FAMILY_NAME);
      String member_name = c.getString(TAG_MEMBER_NAME);

      main_group.add(family_name);
      group_member.put(family_name, member_name);

      if (!listDataHeader.contains(main_group))
        listDataHeader.add(main_group);

      componentList.add(group_member);
    }
  }
}

请帮忙。提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果您使用的是HashMap,则列表中的密钥不能超过一次。每个密钥必须是唯一的。 这可能是一个解决方案:

HashMap<String, ArrayList<String>> group_member = new HashMap<String, ArrayList<String>>();

...使用Hashmap作为目录,关键是返回家庭成员的Arraylist。