Estoy tratando de implementar un mapa en un fragmento y puedo mostrar el mapa, pero onMapReady no funciona porque no agrega el marcador y no mueve la cámara. Código
Fragmento de mapa
class MapFragment : Fragment(), OnMapReadyCallback { private lateinit var mMap: GoogleMap companion object { var mapFragment : SupportMapFragment?=null val TAG: String = MapFragment::class.java.simpleName fun newInstance() = MapFragment() } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { // Inflate the layout for this fragment var rootView = inflater.inflate(R.layout.fragment_map, container, false) mapFragment = fragmentManager?.findFragmentById(R.id.fallasMap) as SupportMapFragment? mapFragment?.getMapAsync(this) return rootView } override fun onMapReady(googleMap: GoogleMap?) { mMap = googleMap!! // Add a marker in Sydney and move the camera val sydney = LatLng(-34.0, 151.0) mMap.addMarker(MarkerOptions().position(sydney).title("Marker in Sydney")) mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)) } }xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".fragments.MapFragment"> <fragment android:id="@+id/fallasMap" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>Está utilizando el administrador de fragmentos incorrecto para acceder a él. Dado que es un fragmento dentro de un fragmento, se agrega a childFragmentManager .
childFragmentManager.findFragmentById(R.id.fallasMap) as SupportMapFragment También use el as? operador de conversión en lugar de conversión al tipo opcional. O incluso haz un lanzamiento normal, ya que necesitas que el fragmento sea correcto y null sería un error.
Tampoco almacene una referencia estática al fragmento si no lo limpia correctamente.
Debe pasar Value googleMap a mMap para interactuar con sus marcadores
override fun onMapReady(googleMap: GoogleMap?) { mMap = googleMap // Add a marker in Sydney and move the camera val sydney = LatLng(-34.0, 151.0) mMap.addMarker(MarkerOptions().position(sydney).title("Marker in Sydney")) mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)) }No es correcto compartir estas variables globales en su caso. Debe eliminarlas del companion object y crear una nueva instancia cada vez que abra un fragmento.
Cuando rootView != null , no se llamará al método onMapReady .
Así que sugiero eliminarlos del companion object y ponerlos en onCreateView sin la condición if (rootView == null) (eliminar la condición).