#android #kotlin
Вопрос:
Я просто учусь Kotlin
на прошлой неделе. Я научился создавать приложение для карт и могу показывать маркер при нажатии на точку. К сожалению, я попытался создать LiveData
закладку для извлечения карты из базы данных, и я застрял, получая маркер, отображаемый моим кодом.
В моем отладчике Android я почти уверен, что метод LiveData работает, потому displayAllBookmarks
что метод on (пожалуйста, обратитесь к приведенному ниже коду) получает все данные из базы данных. И каждый раз, когда я добавлял новую закладку на карту, вызывались живые данные. Так что я не думаю, что с живыми данными что-то не так.
Вот мой код, чтобы показать Маркер на моей карте
Метод onMapReady()
override fun onMapReady(googleMap: GoogleMap) {
mMap = GoogleMap
------------- Bunch of method --------------
createBookmarkMarkerObserver()
}
Метод LiveData createBookmarkMarkerObserver()
private fun createBookmarkMarkerObserver() {
mapsViewModel.getBookmarkMarkerViews()?.observer(
this, { it ->
it?.let {
displayAllBookmarks(it)
}
)
}
Повторите результат закладки displayAllBookmarks(bookmarks)
private fun displayAllBookmarks(bookmarks: List<MapsViewModel.BookmarkMarkerView>) {
bookmarks.forEach { it ->
addPlaceMarker(it)
}
Log.e("Marker", bookmarks.toString())
}
Добавление маркера места addPlaceMarker(MapsViewModel<BookmarkMarkerView>)
private fun addPlaceMarker(
bookmark: MapsViewModel.BookmarkMarkerView): Marker? {
val marker = mMap.addMarker(MarkerOptions()
.position(bookmark.location)
.icon(BitmapDescriptorFactory.defaultMarker(
BitmapDescriptorFactory.HUE_AZURE))
.alpha(0.8f))
marker.tag = bookmark
return marker
}
для MapsViewModel.BookmarkMarkerView
класса это только данные, как показано ниже
data class BookmarkMarkerView(
var id: Long? = null,
var location: LatLng = LatLng(0.0,0.0)
)
Если для этого потребуется какая-либо дополнительная информация, пожалуйста, просто сообщите мне.
Большое Спасибо
Комментарии:
1. Я сомневаюсь, что ваша проблема связана с livedata, вы жестко закодировали значения и отправили их на маркер на своей карте без livedata ? Также
addPlaceMarker()
функция возвращает aMarker
, но она нигде не используется, почему ?2. Привет @SharpEdge, Вы правы, после того, как я сравнил сохраненный номер в моей базе данных с местоположением по широте и долготе, номер стал другим. На отображении Закладки я случайно установил Широту с Долготой. Спасибо