Java использует ссылки на значения, и в этом ваша проблема.
Как указывает @ st0le, вы можете просто скопировать и вставить свой фрагмент кода прямо в цикл.
Почему мы можем это сделать? Потому что вызов GeoPoint point = new GeoPoint(tlat,tlng)
изменит ссылку, хранящуюся в point
, а не ее значение. Исходное значение point
все еще существует, и ссылка на него была перенесена в конструктор OverlayItem
.
while(mcursor.moveToNext()){
String tname = mcursor.getString(4);
String tmessage = mcursor.getString(7);
String tlink = mcursor.getString(5);
String tsname = mcursor.getString(3);
Double tlat = mcursor.getDouble(1);
Double tlng = mcursor.getDouble(2);
GeoPoint point = new GeoPoint(tlat,tlng);
OverlayItem overlayitem = new OverlayItem(point, tname, tmessage);
itemizedoverlay.addOverlay(overlayitem);
}
mapOverlays.add(itemizedoverlay);
И вам понадобится последняя строка вне цикла, потому что в противном случае itemizedoverlay
будет в mapOverlays
несколько раз. Достаточно добавить его только один раз. Либо до входа в цикл, либо после. Добавление элементов в itemizedoverlay
изменяет его значение . Предыдущие ссылки на itemizedoverlay
останутся прежними, и поэтому изменения будут немедленно видны в mapOverlays
.