【发布时间】:2011-01-29 14:20:57
【问题描述】:
我似乎在使用 ItemizedOverlay 和 OveralyItems 时遇到了问题。
我可以让第一个 overlayItem 出现在地图上,但之后没有任何项目。
代码示例开启: http://www.anddev.org/multiple_overlay_items-t12171.html
在这里快速概览:
public class Markers extends ItemizedOverlay {
private Context ctx;
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
public Markers(Drawable defaultMarker, Context cont) {
super(boundCenterBottom(defaultMarker));
this.ctx = cont;
// TODO Auto-generated constructor stub
}
@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
return mOverlays.get(i);
}
@Override
public boolean onTap(GeoPoint p, MapView mapView) {
// TODO Auto-generated method stub
return super.onTap(p, mapView);
}
@Override
protected boolean onTap(int index) {
// TODO Auto-generated method stub
Toast.makeText(this.ctx, mOverlays.get(index).getTitle().toString()+", Latitude: "+mOverlays.get(index).getPoint().getLatitudeE6(), Toast.LENGTH_SHORT).show();
return super.onTap(index);
}
@Override
public int size() {
// TODO Auto-generated method stub
return mOverlays.size();
}
public void addOverlay(OverlayItem item) {
mOverlays.add(item);
setLastFocusedIndex(-1);
populate();
}
public void clear() {
mOverlays.clear();
setLastFocusedIndex(-1);
populate();
}
}
使用示例:
Markers usersMarker = new Markers(user,overview.this);
GeoPoint p = new GeoPoint((int) (lat * 1E6),(int) (lon * 1E6));
OverlayItem item = new OverlayItem(p,userData[0],userData[3]);
item.setMarker(this.user);
usersMarker.addOverlay(item);
第一个标记出现在地图上,但如果我再添加它们就不会出现? populate() 方法有问题吗?添加所有标记后,我尝试手动调用它,但它仍然没有帮助。请,如果您知道可能出了什么问题,请说出来。
【问题讨论】:
-
您在使用地图视图的活动中调用 invalidate() 还是 postInvalidate()?
-
是的,在添加 ItemizedOverlay 到地图叠加层后,我称之为无效......虽然它没有帮助