Yandex MapKit не работает addTapListener с коллекцией
пытаюсь расставить слушатели кликов на все точки на карте из коллекции при помощи функции ниже, по моим ожиданиям при нажатии на маркер, должно выводится сообщение в лог. Но не происходит ничего. В функции ниже пробовал добавить слушатель каждый раз когда создаётся новая метка, хотя его можно повесить на всю коллекцию. Кто-нибудь сталкивался с таким, как решили?
fun placePointsOnMap() {
val locationsDatabase = currentDatabase // База объектов с координатами
val pinsCollection = mapView.mapWindow.map.mapObjects.addCollection()
val bitmapImage = this.context?.getDrawable(R.drawable.red_location_pin_50)?.toBitmap()
val imageProvider =
ImageProvider.fromBitmap(
bitmapImage
)
val tapListener = MapObjectTapListener() { mapObject, point ->
Log.d("tapListener ", "You tap point")
true
}
locationsDatabase.forEach { point ->
val newPin = Point(point.coordinates.latitude, point.coordinates.longitude)
pinsCollection.addPlacemark().apply {
geometry = newPin
setIcon(imageProvider)
this.addTapListener(tapListener)
}
}
}
Ответы (1 шт):
Автор решения: Сергей Веретенников
→ Ссылка
Разобрался с вопросом:
Создал коллекцию во фрагменте для хранения объектов карты, и при создании коллекции стал сохранять их туда вместе со слушателями:
private val placemarkMapObjectList: MutableList<PlacemarkMapObject> = mutableListOf()
также отдельно создал tapListener
такого вида:
private val tapListener = MapObjectTapListener { mapObject,point ->
//TODO smth...
true
}
сама функция стала такой:
private fun placePointsOnMap() {
val pointsCollection = currentDatabase
val pinsCollection = mapView.mapWindow.map.mapObjects.addCollection()
val bitmapImage = this.context?.getDrawable(R.drawable.red_location_pin_50)?.toBitmap()
val imageProvider =
ImageProvider.fromBitmap(
bitmapImage
)
pointsCollection.forEach { point ->
val newPin = Point(point.coordinates.latitude, point.coordinates.longitude)
val newPlacemarkMapObject =
pinsCollection.addPlacemark().apply {
geometry = newPin
setIcon(imageProvider)
this.addTapListener(tapListener)
}
placemarkMapObjectList.add(newPlacemarkMapObject)
}
}
Надеюсь, поможет кому-нибудь разобраться.