Обновленный ответ
Изображение, которое вы добавили в свое редактирование, ясно объясняет проблему, спасибо за это!
Чтобы тоже решить эту проблему, нам нужно зарегистрировать слушателя иначе. А именно: путем регистрации его в MarkerManager ClusterManager, поскольку этот класс теперь обрабатывает все маркеры. Нам также нужно добавить NormalMarkers немного по-другому, поэтому давайте пройдемся по нему шаг за шагом:
1) Обновление OnMarkerClickListener
из mMap
:
mMap.setOnMarkerClickListener(mClusterManager.getMarkerManager()); // Note the `MarkerManager` here
2) Этот MarkerManager
содержит все коллекции. Нам нужно создать новую коллекцию для этого менеджера, в которую мы добавим маркеры NormalMarkers, которые должны отображаться отдельно от кластеров:
MarkerManager.Collection normalMarkersCollection = mClusterManager.getMarkerManager().newCollection();
3) Добавление маркеров выполняется аналогично тому, как это было раньше, но с использованием метода addMarker()
в коллекции, которую мы создали. Мы должны передать объект MarkerOptions()
этому:
// Create a normal marker
val markerOptions = MarkerOptions()
.position(new LatLng(...))
.title("My marker")
.snippet("With description")
// Add it to the collection
normalMarkersCollection.addMarker(markerOptions)
4) И последнее, но не менее важное: мы хотим, чтобы на нем было OnClickListener
:
normalMarkersCollection.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener {
public boolean onMarkerClick(marker: Marker) {
// NORMAL MARKER CLICKED!
return false;
}
})
5) Готово! Теперь нормальные маркеры добавляются на карту, как и раньше, но с рабочим OnMarkerClickListener
.
Предыдущий ответ
(Настройка прослушивателей щелчков для кластеров и кластеризованных элементов)
Вы должны добавить список прослушивания к mClusterManager
. Настройка списка кликов на mMap
не работает при использовании ClusterManager.
Таким образом, вместо использования mMap.setOnMarkerClickListener
, установите ClusterItemClickListener
в диспетчере кластеров:
mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<MyItem>() {
@Override
public boolean onClusterItemClick(MyItem item) {
Log.d("cluster item","clicked");
return true;
}
});
Кроме того, если вы хотите захватить щелчок элемента кластеризованного элемента, используйте ClusterClickListener
:
mClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener<MyItem>() {
@Override
public boolean onClusterClick(Cluster<MyItem> cluster) {
Log.d("cluster","clicked");
return true;
}
});