#android #google-maps #kotlin #google-maps-markers
#Android #google-карты #kotlin #google-карты-маркеры
Вопрос:
Я застрял на ограничении количества маркеров, которые пользователь может использовать на карте Google Map
Проблема: всякий раз, когда пользователь нажимает на карту Google, маркер продолжает создавать новые, а старые не удаляются.
Обновление: я думаю, что это не попадает в оператор else if. Потому что каждый раз, когда вызывается функция, она перезапускает процесс. Таким образом, позволяя постоянно создавать маркер.
override fun onMapClick(point: LatLng){
val tappedLocation = LatLng(latitude,longitude)
var mapMarkerCount: Int =0
if(mapMarkerCount == 0) {
map.addMarker(
MarkerOptions()
.position(tappedLocation)
.title("You have Clicked")
)
mapMarkerCount
}//check Marker Count
else if(mapMarkerCount == 1){
map.clear()
mapMarkerCount--
}
}
То, что я пробовал, — это присвоение переменной для проверки того, был ли создан маркер.
и если маркер существует, при следующем нажатии на карту он должен очистить карту, а новый маркер находится в новом месте, к которому прикоснулся пользователь.
Ответ №1:
Заранее прошу прощения за мой плохой английский
я думаю, что ваша проблема связана с объявлением вашей переменной.
вы должны попытаться: удалить mapMarkerCount=0
и сделать его логическим я думаю, что программа выполняется mapMarkerCount=0
каждый раз, когда вы добавляете маркер, поэтому я считаю, что это объясняет, почему вы не можете удалить старый
if (markerExist == false)
addOne();
markerExist=true;
elsif (markerExist == true)
map.clear();
add one();
с помощью этого кода
в первый раз вы добавите только новый маркер.
и после того, как вы очистите старый маркер и будете ставить новый при каждом касании экрана
Ответ №2:
Поскольку override fun onMapClick(point: LatLng)
,
это означает, что всякий раз, когда вызывается функция, она всегда будет выполняться построчно fun onMapClick
.
Что вы можете сделать, так это использовать map.clear()
перед размещением maps.addMarker()
, поэтому всякий раз, когда вызывается функция, она сначала очищает карту перед добавлением.
override fun onMapClick(point: LatLng){
map.clear() //above the adding of marker
val tappedLocation = LatLng(latitude,longitude)
map.addMarker(
MarkerOptions()
.position(tappedLocation)
.title("You have Clicked")
)
}
По сути, вам не нужно создавать маркер для проверки. Не рекомендуется, если вы хотите сохранить несколько маркеров или другие вещи, так как это уничтожит все на карте Google. На карту по умолчанию при первом просмотре пользователем.
Комментарии:
1. Обратите внимание, что вы также можете обновить положение маркера, используя сохраненный маркер и вызов
.position
.2. Привет @Andy, в какой строке вы бы назвали
.position
? Я пробовал тот подход, о котором вы упомянули, но он продолжает давать мне несколько маркеров. Я считаю, что ваш подход может быть лучшим способом сделать это.3. в этом коде — избавьтесь от clear, установите переменную класса в результат
addMarker
(когда переменная класса == null); в else (переменная класса != null) используйте переменную класса и вызовите .position(tappedLocation).
Ответ №3:
Какой ваш код присваивается mapMarkerCount = 0
при каждом нажатии на карту, даже если на карте уже может быть маркер. И из-за этого он всегда будет попадать в блок оператора if, потому что mapMarkerCount никогда не будет равен 1 при нажатии на карту. Выполнение этого назначения в самом начале onCreate было бы лучшим вариантом. Или, как кто-то здесь предположил, логическая переменная должна подходить для ваших целей, учитывая, что вы хотите иметь только один маркер на карте. Одна реализация:
var mapMarkerExists: Boolean = false
override fun onMapClick(point: LatLng) {
val tappedLocation = LatLng(latitude,longitude)
if(mapMarkerExists) {
map.clear()
map.addMarker(
MarkerOptions()
.position(tappedLocation)
.title("You have Clicked"))
}//check Marker Count
else {
map.addMarker(
MarkerOptions()
.position(tappedLocation)
.title("You have Clicked"))
mapMarkerExists = true
}
}