Java ArrayList .add()会覆盖以前的值

时间:2014-08-19 07:29:48

标签: java android arraylist

我已经检查了其他遇到同样问题的人,&几乎所有这些都在实例化他们想要在循环之外添加的对象。我已经在我的while循环中做了这个,所以我猜这不是我的问题。

public ArrayList<SHMapTile> tiles = new ArrayList<SHMapTile>();
.
.
.
private void parseXML(XmlPullParser parser) throws XmlPullParserException, IOException
{
    int eventType = parser.getEventType();
    int i = 0;

    while ( eventType != XmlPullParser.END_DOCUMENT )
    {
        String name = null;

        switch ( eventType )
        {
            case XmlPullParser.START_TAG:
            {
                name = parser.getName();

                if ( name.equalsIgnoreCase("tile") )
                {
                    SHMapTile tile = new SHMapTile();
                    tile.gid = i;

                    tiles.add(tile);
                    System.out.println("gid: " + tiles.get(0).gid);
                    i++;
                }

                break;
            }

            case XmlPullParser.END_TAG:
            {
                name = parser.getName();

                if ( name.equalsIgnoreCase("data") )
                {
                    this.runOnUiThread(new Runnable() {
                        public void run() {
                            drawCurrentMapRegion();
                        }
                    });
                }

                break;
            }
        }

        eventType = parser.next();
    }
}

为了进行调试,我为每个新对象附加了一个计数器。当我打印出列表中第一个元素的计数器时,它总是不同的。我试过克隆。也没用。

1 个答案:

答案 0 :(得分:2)

正如您在评论中所说,班级gid的字段SHMapTilestatic

这意味着在类的所有实例之间共享相同的值。如果你更新一个,它将在该类的所有istances中更新。删除static修饰符,它将起作用