Android> Google Maps> Наложение: нажмите разные вещи, чтобы разные вещи происходили - PullRequest
0 голосов
/ 01 января 2012

Я пытаюсь создать приложение, в котором, когда пользователь нажимает на пустую часть карты, появляется новый флаг, а затем, когда он нажимает на флаг, появляется диалоговое окно.

Я сам написал первый метод onTap и скопировал второй из учебника Google Maps, чтобы начать. Проблема в том, что первый всегда срабатывает, а второй никогда не срабатывает. Если я удаляю первый метод, второй работает должным образом (при нажатии на флаг появляется соответствующий диалог). Оба эти метода в классе ItemizedOverlay, mContext - это контекст, сгенерированный конструктором, а location - это ArrayList из OverlayItems.

Мой вопрос: как я могу совместить эти два?

    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 Ответ

3 голосов
/ 01 января 2012

Проблема в том, что, осуществляя / переопределяя 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;
}

Надеюсь, это поможет.

...