I'm using osmdroid
In a Fragment, I create many markers dynamically, with InfoWindow. 6.1.17
model.data.observe(requireActivity()) {
mapView.overlays.clear()
mapView.overlays.forEach { overlay ->
if (overlay is Marker && overlay.infoWindow != null) {
overlay.infoWindow = null
overlay.remove(mapView)
}
}
mapView.removeAllViewsInLayout()
data.forEach {
val marker = Marker(mapView).apply {
position = GeoPoint(it.localisation.lat, it.lon)
setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM)
infoWindow = MarkerWindow(mapView, it.title)
showInfoWindow()
setOnMarkerClickListener { marker, mapView ->
println(">>>Try to navigate")
findNavController().navigate(R.id.other_fragment)
false
}
}
mapView.overlays.add(marker)
}
}
mapView.invalidate()
}
All InfoWindows are opened at the end of algo. When i click on the marker, i want to navigate in another fragment, but i have the following error
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.ViewGroup.removeView(android.view.View)' on a null object reference
at org.osmdroid.views.overlay.infowindow.InfoWindow.close(InfoWindow.java:160)
at org.osmdroid.views.overlay.infowindow.InfoWindow.onDetach(InfoWindow.java:169)
at org.osmdroid.views.MapViewRepository.onDetach(MapViewRepository.java:41)
at org.osmdroid.views.MapView.onDetach(MapView.java:1082)
at org.osmdroid.views.MapView.onDetachedFromWindow(MapView.java:1273)
at android.view.View.dispatchDetachedFromWindow(View.java:20534)
If i remove the line showInfoWindow() , the navigation is OK.
So i think there is a problem with the info window opened before the navigation, but i don't understand what.
I tried to remove infowindow before navigation, like this
setOnMarkerClickListener { marker, mapView ->
mapView.overlays.clear()
mapView.removeAllViewsInLayout()
println(">>>Try to navigate")
findNavController().navigate(R.id.other_fragment)
false
}
but issue still persist.
Thanks for your help