0

无论我在地图上单击哪个元素,我的 MapActivity 中的 onTap 函数始终返回 0。这是 onTap 函数:

@Override
protected boolean onTap(int i) {

    OverlayItem item = myOverlays.get(i);
    AlertDialog.Builder dialog = new AlertDialog.Builder(context);

    dialog.setTitle(item.getTitle());
    dialog.show();

    return true;
}

//myOverlays is a ArrayList<OverlayItem>

然而。每次函数运行时,索引 ( i ) 始终为 0。我已经使用断点和日志调试确认了这一点。这让我相当困惑,因为在使用此功能时,我收到了正确的 Dialog 内容。

item.getTitle ()为单击的元素获取适当的标题,这意味着 item-object 是正确的,这意味着myOverlays.get(i)能够以某种方式获取不同的对象,即使索引 ( i ) 始终为 0。这令人难以置信。

有人愿意开导我吗?您是否认为这可能与在模拟器上执行“点击”这一事实有关?

提前致谢。克里斯

4

1 回答 1

1

这只是一个猜测,因为您没有显示创建覆盖和添加项目的代码。

可能您正在向ItemizedOverlays每个叠加层添加多个且仅一个项目。就像是:

for(i=0; i<count; i++){
  MyItemizedOverlay itemizedOverlay = new MyItemizedOverlay(...);
  OverlayItem oi = new OverlayItem(...);
  itemizedOverlay.add(oi);
  mapView.getOverlays().add(itemizedOverlay);
}

使用上面的代码,您将有多个叠加层,每个叠加层都有一个位于位置 0 的项目。

为了提高效率,您应该执行以下操作:

MyItemizedOverlay itemizedOverlay = new MyItemizedOverlay(...);
for(i=0; i<count; i++){
  OverlayItem oi = new OverlayItem(...);
  itemizedOverlay.add(oi);
}
mapView.getOverlays().add(itemizedOverlay);

使用上面的代码,您将只有一个包含多个项目的叠加层。

问候。

于 2012-11-12T22:07:21.497 回答