Search code examples
androidandroid-maps-extensions

android-maps-extensions infoWindow doesn't show


I need display >100 markers on the map and show info window after click on marker. I have used android google maps api v2, but it is lagging with such number of markers. So I decided switch to android-maps-extensions. After I did it info window has stopped appear after click on marker.

Here is my code:

private void prepareMap() {
    SupportMapFragment fragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.locationsMap);
    map = fragment.getExtendedMap();

    ClusteringSettings settings = new ClusteringSettings();
    settings.clusterOptionsProvider(new ClusterOptionsProvider() {
        @Override
        public ClusterOptions getClusterOptions(List<Marker> markers) {
            float hue = BitmapDescriptorFactory.HUE_RED;
            BitmapDescriptor icon = BitmapDescriptorFactory.defaultMarker(hue);
            return new ClusterOptions().icon(icon);
        }
    });
    settings.clusterSize(100);
    settings.addMarkersDynamically(true);
    map.setClustering(settings);

    map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            // breakpoint here are working. marker is not null
            marker.showInfoWindow();
            return false;
        }
    });
}

public void onLoadFinished(android.support.v4.content.Loader loader, Cursor cursor) {
    if (map != null) {
        cursor.moveToFirst();
        int count = cursor.getCount();
        for (int i = 0; i < count; i++) {

            Location location = new Location(cursor);

            MarkerOptions options = new MarkerOptions();
            options.position( new LatLng(location.getLatitude(), location.getLongitude()));
            options.title(location.getTitle()); // title is not null
            options.snippet(location.getAddress()); // address is not null
            options.data(location);
            map.addMarker(options);
            cursor.moveToNext();
        }
    }
}

Any suggestions? I have try use own InfoWindowAdapter, but it is not scaling this window for appropriate content, however I am using wrap_content attribute in xml.


Solution

  • As there is no support for setting title on ClusterOptions (yet), you will have to use InfoWindowAdapter (you may put a separate question on why it is not working as you want it) or add title to ClusterOptions yourself and make sure its value is forwarded to virtual marker that represents cluster. This sounds complicated but is fairly easy. You may also want to add issue on GitHub regarding title not being supported for clustrers.
    After that you may use something like:

    return new ClusterOptions().icon(icon).title("Test");
    

    Then you will have to figure out what title will best fit your needs. You will most likely want to use List<Marker> to calculate title for this group of markers.

    Note: If you zoom enough to show separate markers, you can click on them to show title. If not, there is something more wrong in your code.