OSMDroid - Cannot navigate to a fragment after clicking on a marker

24 Views Asked by At

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

0

There are 0 best solutions below