Yandex MapKit Android как сделать нажатие на маркер?

Рейтинг: 0Ответов: 2Опубликовано: 19.02.2023

Приложение получает координаты точек, добавляет их в список и создает кластеры из них

val clusterizedCollection =
      mapYa.map.mapObjects.addClusterizedPlacemarkCollection(this)
        

GlobalScope.launch(Dispatchers.Main) {
      val points = createPoints()
      clusterizedCollection.addPlacemarks(points, imageProvider, IconStyle())
      clusterizedCollection.clusterPlacemarks(60.0, 15)

}

Для кластеров есть метод onClusterTap, но как сделать теперь слушатель нажатий для маркера и например отобразить его координаты?

UPD: Так тоже не работает, при нажатии ничего не происходит

var pointCollection:MapObjectCollection  = mapYa.map.mapObjects.addCollection();
pointCollection.addTapListener { mapObject, point ->
    val latitude = point.latitude
    val longitude = point.longitude
            
    if (mapObject is PlacemarkMapObject) {
       val placemark = mapObject as PlacemarkMapObject
       val pointGeometry = placemark.geometry as Point
       val placemarkLatitude = pointGeometry.latitude
       val placemarkLongitude = pointGeometry.longitude
       val context = applicationContext
       Toast.makeText(this, "Метка: ($placemarkLatitude, $placemarkLongitude)", Toast.LENGTH_SHORT).show()
          true 
     } else {
       false 

     }
}

Ответы

▲ 1

Можно использовать метод addTapListener на каждом маркере

points.forEach { point ->
    point.addTapListener { _, _ ->
        // Обработка нажатия на маркер
        val position = point.geometry as GeoPoint
        Log.d("Marker", "Latitude: ${position.latitude}, Longitude: ${position.longitude}")
        true // Возвращаем true, чтобы остановить всплывающее окно кластера
    }
}

Когда пользователь нажимает на маркер, выводятся координаты маркера в консоль через Log.d. Чтобы показать координаты маркера на экране,можно сделать так

points.forEach { point ->
    point.addTapListener { _, _ ->
        // Обработка нажатия на маркер
        val position = point.geometry as GeoPoint
        val message = "Latitude: ${position.latitude}, Longitude: ${position.longitude}"
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
        true // Возвращаем true, чтобы остановить всплывающее окно кластера
    }
}
▲ 1

Похоже, вам требуется добавить слушатель addTapListener на ClusterizedPlacemarkCollectionClusterizedPlacemarkCollection.addTapListener.

Тогда в метод onMapObjectTap придет ссылка на нажатый объект.