无法在Arraylist中添加HashMap而不删除前一个元素

时间:2014-06-03 08:57:50

标签: java android collections arraylist

我的代码:

public ArrayList<Map<String, String>> XMLToArray(String Data, Document Doc,
        XMLParser file) {
    Map<String, String> map = new HashMap<String, String>();
    ArrayList<Map<String, String>> menuItems = new ArrayList<Map<String, String>>();

    for (int i = 0; i < Doc.getElementsByTagName("item").getLength(); i++) {

        Element e = (Element) Doc.getElementsByTagName("title").item(i);
        Element e2 = (Element) Doc.getElementsByTagName("description")
                .item(i);

        // Element e3 = (Element)Doc.getElementsByTagName("link").item(i);

        map.put("titre", file.getElementValue(e));
        map.put("description", file.getElementValue(e2));

        // map.put("lien", file.getElementValue(e3));

        // adding HashList to ArrayList
        menuItems.add(map);
    }

    return menuItems;
}

在调试中,我可以在地图中看到每个标题和描述。当我在arrayList中添加我的地图时,arraylist中的所有先前键值都被当前键值替换。 所以最后我有一个带有20个相同标题和描述的arrayList。

如何在arrayList中添加多个标题和描述而不删除所有其他标题和描述?

2 个答案:

答案 0 :(得分:1)

您应该为每个menuItem创建一个新地图。在下面的示例中,我将地图初始化程序移动到for循环:

public ArrayList<Map<String, String>> XMLToArray(String Data, Document Doc, XMLParser file)
 {

    ArrayList<Map<String, String>> menuItems = new ArrayList<Map<String, String>>();

    for(int i = 0; i < Doc.getElementsByTagName("item").getLength();i++)
    {
      Map<String, String> map = new HashMap<String, String>();

      Element e = (Element)Doc.getElementsByTagName("title").item(i);
      Element e2 = (Element)Doc.getElementsByTagName("description").item(i);

      //Element e3 = (Element)Doc.getElementsByTagName("link").item(i);

      map.put("titre", file.getElementValue(e));
      map.put("description", file.getElementValue(e2));

      //map.put("lien", file.getElementValue(e3));

      // adding HashList to ArrayList
      menuItems.add(map);
  }

 return menuItems;
}

答案 1 :(得分:0)

您必须在循环中创建地图:

public ArrayList<Map<String, String>> XMLToArray(String Data, Document Doc, XMLParser file) {
    ArrayList<Map<String, String>> menuItems = new ArrayList<Map<String, String>>();

    for(int i = 0; i < Doc.getElementsByTagName("item").getLength(); i++) {
        Map<String, String> map = new HashMap<String, String>();
        Element e = (Element)Doc.getElementsByTagName("title").item(i);
    }
}