Évitez d'utiliser des implémentations d'activité OnMarkerClickListener, utilisez un OnMarkerClickListener local
// Not a good idea
class MapActivity extends Activity implements OnMarkerClickListener {
}
Vous aurez besoin d'une carte pour rechercher le modèle de données d'origine lié au marqueur
private Map<Marker, Map<String, Object>> markers = new HashMap<>();
Vous aurez besoin d'un modèle de données
private Map<String, Object> dataModel = new HashMap<>();
Mettez des données dans le modèle de données
dataModel.put("title", "My Spot");
dataModel.put("snipet", "This is my spot!");
dataModel.put("latitude", 20.0f);
dataModel.put("longitude", 100.0f);
Lors de la création d'un nouveau marqueur à l'aide d'un modèle de données, ajoutez les deux à la carte Maker
Marker marker = googleMap.addMarker(markerOptions);
markers.put(marker, dataModel);
Pour un événement de marqueur de clic, utilisez un OnMarkerClickListener local:
@Override
public void onMapReady(GoogleMap googleMap) {
    // grab for laters
    this.googleMap = googleMap;
    googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            Map dataModel = (Map)markers.get(marker);
            String title = (String)dataModel.get("title");
            markerOnClick(title);
            return false;
        }
    });
    mapView.onResume();
    showMarkers();
    ZoomAsync zoomAsync = new ZoomAsync();
    zoomAsync.execute();
}
Pour afficher la fenêtre d'informations, récupérez le modèle de données d'origine à partir de la carte des marqueurs:
@Override
public void onMapReady(GoogleMap googleMap) {
    this.googleMap = googleMap;
    googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
        @Override
        public void onInfoWindowClick(Marker marker) {
            Map dataModel = (Map)markers.get(marker);
            String title = (String)dataModel.get("title");
            infoWindowOnClick(title);
        }
    });