Я использую Mapbox
для своего приложения для Android с kotlin. Я добавил OnCameraMoveListener
, чтобы активировать некоторые действия, когда пользователи перемещают камеру, и она работает отлично.
На определенном этапе мне нужно остановить этот OnCameraMoveListener
для работы.
Вот мой код:
mapboxMap.addOnCameraMoveStartedListener(object :
MapboxMap.OnCameraMoveStartedListener {
private val REASONS = arrayOf(
"REASON_API_GESTURE",
"REASON_DEVELOPER_ANIMATION",
"REASON_API_ANIMATION"
)
override fun onCameraMoveStarted(reason: Int) {
}
})
mapboxMap.addOnCameraMoveListener {
}
mapboxMap.addOnCameraMoveCancelListener {
}
mapboxMap.addOnCameraIdleListener {
val lat = mapboxMap.cameraPosition.target.latitude
val long = mapboxMap.cameraPosition.target.longitude
val accessToken = getString(R.string.access_token)
val url =
"https://api.mapbox.com/v4/geocode/mapbox.places/$long,$lat.json?access_token=$accessToken"
val request = Request.Builder().url(url).build()
val client = OkHttpClient()
client.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
println("failed to execute the url")
}
override fun onResponse(call: Call, response: okhttp3.Response) {
val body = response.body?.string()
val gson = GsonBuilder().create()
val resp = gson.fromJson(body, Response::class.java)
if (REQUEST_CODE_AUTOCOMPLETE == 1) {
fromName = resp.features[0].place_name
runOnUiThread {
FromEditText.setText(fromName)
}
fromLat = resp.features[0].geometry.coordinates[1]
fromLong = resp.features[0].geometry.coordinates[0]
checkOnValues(
Point.fromLngLat(fromLong, fromLat),
Point.fromLngLat(0.0, 0.0)
)
} else {
toName = resp.features[0].place_name
runOnUiThread {
ToEditText.setText(toName)
toLat = resp.features[0].geometry.coordinates[1]
toLong = resp.features[0].geometry.coordinates[0]
checkOnValues(
Point.fromLngLat(fromLong, fromLat),
Point.fromLngLat(toLong, toLat)
)
}
}
}
})
if (REQUEST_CODE_AUTOCOMPLETE == 1) {
mapboxMap.clear()
mapboxMap.addMarker(
MarkerOptions()
.position(
LatLng(
(lat),
(long)
)
)
.title("From")
)
} else {
mapboxMap.clear()
mapboxMap.addMarker(
MarkerOptions()
.position(
LatLng(
(lat),
(long)
)
)
.title("To")
)
}
А вот как я пытался его остановить:
mapboxMap!!.removeOnCameraMoveListener { }
Проблема в том, что после выполнения кода удаления строки. он все еще работает, поскольку ничего не произошло.
Примечание :
Мой mapboxMap.addOnCameraMoveStartedListener
находится внутри функции onMapReady
, я думаю, что это поможет каким-то образом найти ответ,