Как сделать маркеры кликабельными, а кластеры не кликабельными?

Я разрабатываю свое приложение, которое использует маркеры на карте Google. Затем я использую кластеризацию, чтобы собрать слишком близкие маркеры. Вот часть моего кода:

MapViewer.java

public class MapViewer extends Activity implements OnInfoWindowClickListener {

    private GoogleMap map;
    private ClusterManager<MyItem> mClusterManager;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mapviewer);

        try {
            map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
            if (map != null) {
                map.setMyLocationEnabled(true);
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                map.getUiSettings().setRotateGesturesEnabled(false);


                mClusterManager = new ClusterManager<MyItem>(this, map);
                mClusterManager.setRenderer(new MyClusterRenderer(this, map, mClusterManager));

                map.setOnCameraChangeListener(mClusterManager);
                map.setOnMarkerClickListener(mClusterManager);

                map.setInfoWindowAdapter(new ClusterInfoWindow(getLayoutInflater()));
                map.setOnInfoWindowClickListener(this);

                addItems();
            }
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onInfoWindowClick(Marker marker) {
        // My code
    }

    public void addItems() {
        // My code
    }
}

ClusterInfoWindow.java

public class ClusterInfoWindow implements InfoWindowAdapter {
    LayoutInflater inflater = null;

    public ClusterInfoWindow(LayoutInflater inflater) {
        this.inflater = inflater;
    }

    @Override
    public View getInfoWindow(Marker marker) {
        return(null);
    }

    @Override
    public View getInfoContents(Marker marker) {
        View popup = inflater.inflate(R.layout.infowindow, null);

        TextView tv = (TextView)popup.findViewById(R.id.title);

        tv.setText(marker.getTitle());
        tv = (TextView)popup.findViewById(R.id.snippet);
        tv.setText(marker.getSnippet());

        return(popup);
    }
}

Если я нажму на один маркер, появится всплывающее окно с некоторыми подробностями. То же самое произойдет, если я нажму на кластер. Как сделать кластер не кликабельным? Я не хочу ничего показывать, когда пользователь нажимает на кластер. Спасибо.


person smartmouse    schedule 05.01.2015    source источник
comment
Я только что получил работающее решение, которое делает именно это, оно показывает InfoWindows для маркеров, но не для кластеров. Посмотрите здесь: stackoverflow .com/questions/30958224/   -  person Daniel Nugent    schedule 21.06.2015


Ответы (2)


На основе документации из Google Maps:

If you want to add specific functionality in response to a marker click event, set the map's OnMarkerClickListener() to the ClusterManager, since ClusterManager implements the listener.

Итак, вместо map.setOnMarkerClickListener(mClusterManager); вы можете изменить его на следующее:

map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                marker.showInfoWindow();
                return false;
            }
       });
person ztan    schedule 05.01.2015

Вы хотите реализовать ClusterManager.OnClusterItemClickListener или ClusterManager.OnClusterItemInfoWindowClickListener.

person Paul    schedule 29.11.2015