我已经检查了其他面临相同问题的人,并且几乎所有人都在实例化他们想要在循环之外添加的对象。我已经在我的 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();
}
}
为了调试,我为每个新对象附加了一个计数器。当我打印出列表中第一个元素的计数器时,它总是不同的。我试过克隆。也没用。
最佳答案
正如您在评论中所说,SHMapTile
类的字段gid
是static
。
这意味着相同的值在类的所有 实例之间共享。如果您更新一个,它将在该类的所有实例中更新。去掉 static
修饰符就可以了
关于Java ArrayList .add() 覆盖以前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25377855/