Андроид студия студия выдает ошибку: Класс не является абстрактным и не реализует абстрактный член public abstract fun onCameraPosition
Подскажите пожалуйста, почему при компиляции проекта андроид студия выдает ошибку
:Класс 'Karta' не является абстрактным и не реализует абстрактный член public abstract fun onCameraPositionChanged(p0: Map, p1: CameraPosition, p2: CameraUpdateSource, p3: Boolean): Единица измерения, определенная в com.yandex.mapkit.map.CameraListener
Код:
class Karta : AppCompatActivity(), Session.SearchListener,UserLocationObjectListener,
CameraListener {
/**
* Replace "your_api_key" with a valid developer key.
* You can get it at the https://developer.tech.yandex.ru/ website.
*/
private lateinit var userLocationLayer: UserLocationLayer
private var routeStartLocation = Point(0.0, 0.0)
private var permissionLocation = false
private var followUserLocation = false
private val MAPKIT_API_KEY = "98d6ff88-e2bc-4e2b-a9a3-ec2e87b332aa"
private var mapView: MapView? = null
private var searchEdit: EditText? = null
private var searchManager: SearchManager? = null
private var searchSession: Session? = null
private fun submitQuery(query: String) {
searchSession = searchManager!!.submit(
query,
VisibleRegionUtils.toPolygon(mapView!!.map.visibleRegion),
SearchOptions(),
this
)
}
override fun onCreate(savedInstanceState: Bundle?) {
MapKitFactory.setApiKey(MAPKIT_API_KEY)
MapKitFactory.initialize(this)
SearchFactory.initialize(this)
setContentView(R.layout.karta)
super.onCreate(savedInstanceState)
checkPermission()
userInterface()
searchManager = SearchFactory.getInstance().createSearchManager(SearchManagerType.COMBINED)
mapView = findViewById<View>(R.id.mapview) as MapView
mapView!!.map.addCameraListener(this)
searchEdit = findViewById<View>(R.id.search_edit) as EditText
searchEdit!!.setOnEditorActionListener { textView, actionId, keyEvent ->
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
submitQuery(searchEdit!!.text.toString())
}
false
}
var mapKit: MapKit = MapKitFactory.getInstance()
requestLocationPermission()
var locationonmapkit = mapKit.createUserLocationLayer(mapview.mapWindow)
locationonmapkit.isVisible = true
mapview.map.move(
CameraPosition(Point(54.345241, 84.209828), 11.0f, 0.0f, 0.0f),
Animation(Animation.Type.SMOOTH, 4f), null
)
submitQuery(searchEdit!!.text.toString())
}
private fun requestLocationPermission() {
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_COARSE_LOCATION
) != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
this,
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
),
0
)
return
}
}
private fun checkPermission() {
val permissionLocation =
ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
if (permissionLocation != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
requestPermissionLocation
)
} else {
onMapReady()
}
}
override fun onRequestPermissionsResult(
requestCode: Int, permissions: Array<String>, grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when (requestCode) {
requestPermissionLocation -> {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
onMapReady()
}
return
}
}
}
private fun userInterface() {
val mapLogoAlignment = Alignment(HorizontalAlignment.LEFT, VerticalAlignment.BOTTOM)
mapview.map.logo.setAlignment(mapLogoAlignment)
user_location_fab.setOnClickListener {
if (permissionLocation) {
cameraUserPosition()
followUserLocation = true
} else {
checkPermission()
}
}
}
private fun onMapReady() {
val mapKit = MapKitFactory.getInstance()
userLocationLayer = mapKit.createUserLocationLayer(mapview.mapWindow)
userLocationLayer.isVisible = true
userLocationLayer.isHeadingEnabled = true
userLocationLayer.setObjectListener(this)
mapview.map.addCameraListener(this)
cameraUserPosition()
permissionLocation = true
}
private fun cameraUserPosition() {
if (userLocationLayer.cameraPosition() != null) {
routeStartLocation = userLocationLayer.cameraPosition()!!.target
mapview.map.move(
CameraPosition(routeStartLocation, 16f, 0f, 0f), Animation(Animation.Type.SMOOTH, 1f), null
)
} else {
mapview.map.move(CameraPosition(Point(0.0, 0.0), 16f, 0f, 0f))
}
}
private fun setAnchor() {
userLocationLayer.setAnchor(
PointF((mapview.width * 0.5).toFloat(), (mapview.height * 0.5).toFloat()),
PointF((mapview.width * 0.5).toFloat(), (mapview.height * 0.83).toFloat())
)
user_location_fab.setImageResource(R.drawable.ic_my_location_black_24dp)
followUserLocation = false
}
private fun noAnchor() {
userLocationLayer.resetAnchor()
user_location_fab.setImageResource(R.drawable.ic_location_searching_black_24dp)
}
override fun onObjectAdded(userLocationView: UserLocationView) {
setAnchor()
userLocationView.pin.setIcon(ImageProvider.fromResource(this, R.drawable.user_arrow))
userLocationView.arrow.setIcon(ImageProvider.fromResource(this, R.drawable.user_arrow))
userLocationView.accuracyCircle.fillColor = Color.BLUE
}
override fun onObjectUpdated(p0: UserLocationView, p1: ObjectEvent) {}
override fun onObjectRemoved(p0: UserLocationView) {}
override fun onStop() {
mapView!!.onStop()
MapKitFactory.getInstance().onStop()
super.onStop()
}
override fun onStart() {
super.onStart()
MapKitFactory.getInstance().onStart()
mapView!!.onStart()
}
override fun onSearchResponse(response: Response) {
val mapObjects = mapView!!.map.mapObjects
mapObjects.clear()
for (searchResult in response.collection.children) {
val resultLocation = searchResult.obj!!.geometry[0].point
if (resultLocation != null) {
mapObjects.addPlacemark(
resultLocation,
ImageProvider.fromResource(this, R.drawable.search_result)
)
}
}
}
override fun onSearchError(error: Error) {
var errorMessage = "Неизвестная ошибка!"
if (error is RemoteError){
errorMessage = "Беспроводная ошибка!"
}else if (error is NetworkError){
errorMessage = "Проблема с интернетом!"
}
Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT).show()
}
override fun onCameraPositionChanged(
map: Map,
cameraPosition: CameraPosition,
cameraUpdateReason: CameraUpdateReason,
finish: Boolean
) {
if (finish) {
submitQuery(searchEdit!!.text.toString())
if (finish) {
if (followUserLocation) {
setAnchor()
}
} else {
if (!followUserLocation) {
noAnchor()
}
}
}
}
companion object {
/**
* Replace "your_api_key" with a valid developer key.
* You can get it at the https://developer.tech.yandex.ru/ website.
*/
const val mapKitApiKey = "98d6ff88-e2bc-4e2b-a9a3-ec2e87b332aa"
const val requestPermissionLocation = 1
}
}
Xml код:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<com.yandex.mapkit.mapview.MapView
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<EditText
android:layout_marginTop="10dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:padding="3dp"
android:id="@+id/search_edit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:imeOptions="actionSearch"
android:inputType="text"
android:maxLines="1"
android:hint=" Поиск"
android:gravity="start"
android:background="@drawable/poisk"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<ImageButton
android:id="@+id/imageButton2"
android:layout_width="61dp"
android:layout_height="104dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:contentDescription="@string/назад"
android:onClick="imageButton2"
android:src="@drawable/common_full_open_on_phone"
tools:ignore="ImageContrastCheck,MissingConstraints,UsingOnClickInXml" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/user_location_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
app:backgroundTint="@color/colorNull"
app:elevation="8dp"
app:srcCompat="@drawable/ic_location_disabled_black_24dp"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
Источник: Stack Overflow на русском