Android>谷歌地图>叠加:点击不同的东西以使不同的事情发生

时间:2011-12-31 21:53:29

标签: java android google-maps overlay itemizedoverlay

我正在尝试创建一个应用程序,当用户点击地图的空白部分时,会出现一个新标记,然后当他们点击该标记时,会出现一个对话框。

我自己编写了第一个onTap方法,并从Google Maps教程中复制了第二个方法,让我自己开始。问题是,第一个总是触发而第二个永远不会触发。如果我删除第一个方法,第二个方法就像它应该的那样工作(点击一个标志使其出现相应的对话框)。这些都是ItemizedOverlay类中的方法,mContext是构造函数生成的上下文,locations是OverlayItems的ArrayList。

我的问题是,如何调和这两者?

    public boolean onTap(GeoPoint p, MapView mapView){
        locations.add(new OverlayItem(p, "Point 3", "Point 3"));
        populate();
        return false;
    }

    @Override
    protected boolean onTap(int index) {
      OverlayItem item = locations.get(index);
      AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
      dialog.setTitle(item.getTitle());
      dialog.setMessage(item.getSnippet());
      dialog.show();
      return true;
    }

1 个答案:

答案 0 :(得分:3)

问题在于,通过实现/覆盖onTap(GeoPoint p, MapView mapView),您阻止ItemizedOverlay自己实现该方法的运行本身通常会调用onTap(int index)

你想要更像......的东西。

public boolean onTap(GeoPoint p, MapView mapView){
    if (super.onTap(p, mapView)) 
        return true; 

    locations.add(new OverlayItem(p, "Point 3", "Point 3"));
    populate();
    return false;
}

@Override
protected boolean onTap(int index) {
  OverlayItem item = locations.get(index);
  AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
  dialog.setTitle(item.getTitle());
  dialog.setMessage(item.getSnippet());
  dialog.show();
  return true;
}

希望有所帮助。