Видимо, это ошибка в библиотеке Google Maps Utils, вы можете увидеть связанные темы здесь
Пока они не выпустят новую версию, я нашел обходной путь. Как вы упомянули, вы реализовали класс DefaultClusterRenderer. Если вы не переопределяете метод onClusterUpdatedItem, подобный мне, переопределите этот метод правильной версией кода из библиотеки.
Если вы используете java
protected void onClusterItemUpdated(T item, Marker marker) {
boolean changed = false;
// Update marker text if the item text changed - same logic as adding marker in CreateMarkerTask.perform()
if (item.getTitle() != null && item.getSnippet() != null) {
if (!item.getTitle().equals(marker.getTitle())) {
marker.setTitle(item.getTitle());
changed = true;
}
if (!item.getSnippet().equals(marker.getSnippet())) {
marker.setSnippet(item.getSnippet());
changed = true;
}
} else if (item.getSnippet() != null && !item.getSnippet().equals(marker.getTitle())) {
marker.setTitle(item.getSnippet());
changed = true;
} else if (item.getTitle() != null && !item.getTitle().equals(marker.getTitle())) {
marker.setTitle(item.getTitle());
changed = true;
}
// Update marker position if the item changed position
if (!marker.getPosition().equals(item.getPosition())) {
marker.setPosition(item.getPosition());
changed = true;
}
if (changed && marker.isInfoWindowShown()) {
// Force a refresh of marker info window contents
marker.showInfoWindow();
}
}
или если вы используете Kotlin
override fun onClusterItemUpdated(item: YOUR_MARKER_ITEM_CLASS?, marker: Marker?) {
var changed = false
// Update marker text if the item text changed - same logic as adding marker in CreateMarkerTask.perform()
// Update marker text if the item text changed - same logic as adding marker in CreateMarkerTask.perform()
if (item!!.title != null && item!!.snippet != null) {
if (!item!!.title.equals(marker!!.title)) {
marker!!.title = item!!.title
changed = true
}
if (!item!!.snippet.equals(marker!!.snippet)) {
marker!!.snippet = item!!.snippet
changed = true
}
} else if (item!!.snippet != null && !item!!.snippet.equals(marker!!.title)) {
marker!!.title = item!!.snippet
changed = true
} else if (item!!.title != null && !item!!.title.equals(marker!!.title)) {
marker!!.title = item!!.title
changed = true
}
// Update marker position if the item changed position
// Update marker position if the item changed position
if (!marker!!.position.equals(item!!.position)) {
marker!!.position = item!!.position
changed = true
}
if (changed && marker!!.isInfoWindowShown) {
// Force a refresh of marker info window contents
marker!!.showInfoWindow()
}
}
По крайней мере этот небольшой обходной путь решил проблему до выпуска следующей версии.
РЕДАКТИРОВАТЬ: Я также предлагаю вам покинуть библиотеку Google Maps Utils и используйте эту библиотеку для кластеризации. Это намного удобнее и быстрее.