MapFragment.getMap () devuelve null
Estoy intentando conseguir un mapa de un SupportMapFragment pero devuelve null. De lo que he leído esto podría ser porque el fragmento todavía no se muestra completamente y por lo tanto no existe un mapa ?! Intenté arreglarlo usando executePendingTransactions () pero sin éxito hasta ahora.
¿Alguna idea de cómo solucionarlo?
- Cómo utilizar SupportMapFragment dentro de un fragmento?
- ¿Cómo mostrar varios marcadores en MapFragment en Google Map API v2?
- Referencia MapView en SupportMapFragment
- Android no puede encontrar el método de símbolo getMap ()
- Mostrar MapFragment en un DialogFragment
Aquí está el código
private GoogleMap map; private SupportMapFragment mapFragment; @Override public void onCreate( Bundle savedInstanceState ) { //... super.onCreate( savedInstanceState ); setContentView( R.layout.screen_mission2 ); GoogleMapOptions mapOptions = new GoogleMapOptions(); mapOptions.mapType(GoogleMap.MAP_TYPE_NORMAL) .compassEnabled(true) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false); android.support.v4.app.FragmentManager myFragmentManager = getSupportFragmentManager(); android.support.v4.app.FragmentManager.enableDebugLogging(true); mapFragment = SupportMapFragment.newInstance(mapOptions); FragmentTransaction fragmentTransaction = myFragmentManager.beginTransaction(); fragmentTransaction.add(R.id.mapFragment, mapFragment); fragmentTransaction.commit(); myFragmentManager.executePendingTransactions(); if(mapFragment == null) Base.log("mapFragment==null"); if(map==null){ map = mapFragment.getMap(); Base.log("map should have been initialized"); if(map==null) Base.log("map still null"); } }
Y el archivo de diseño:
<fragment android:id="@+id/mapFragment" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" />
Devuelve el siguiente registro
V/FragmentManager(24224): add: SupportMapFragment{4078c4b8 id=0x7f06003d} V/FragmentManager(24224): Allocated fragment index SupportMapFragment{4078c4b8 #1 id=0x7f06003d} V/FragmentManager(24224): moveto CREATED: SupportMapFragment{4078c4b8 #1 id=0x7f06003d} D/EMR (24224): map should have been initialized D/EMR (24224): map still null
- Android SupportMapFragment Exception Error
- No se puede cambiar el identificador de contenedor del fragmento SupportMapFragment
- SupportMapFragment y onMapReady
- MapFragment que causa NullPointerException en el método getMapAsync (this)
- Google Maps Android API v2 SoporteMapFragmento de pérdida de memoria
- SupportMapFragment carga extremadamente lento la primera vez, pero rápidamente en las cargas siguientes (incluyendo diferentes actividades)
- ClassNotFoundException leyendo un objeto Serializable en una clase que extiende MapFragment en onSaveInstanceState
- El método getSupportFragmentManager () no está definido para el tipo MapFragment
Intente mover todo el código que haga referencia a su GoogleMap
a onStart()
o onResume()
. El mapa en un fragmento de mapa no se instancia hasta después de que el fragmento ha pasado a través de onCreateView
( enlace ), que sucede después de que la actividad principal haya pasado a través de onCreate()
. Además, debe comprobar su GoogleMap
de null
sin importar, porque si los servicios de google play no están instalados, o el mapa no está disponible por alguna otra razón, será null
.
De lo que he leído esto podría ser porque el fragmento todavía no está completamente visualizado y por lo tanto no existe un mapa?
Correcto.
¿Alguna idea de cómo solucionarlo?
Realmente utilizar el archivo de diseño, llamando a setContentView()
, y deshacerse de todas las cosas FragmentTransaction
. A continuación, puede recuperar el SupportMapFragment
ya creado y utilizarlo:
setContentView(R.layout.activity_main); SupportMapFragment mapFrag=(SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment);
Tienes que implementar OnMapReadyCallback
, definir su public void onMapReady(GoogleMap map)
y usarlo para operar en el fragmento como se indica en la API de Google
- Habilitación de la barra de desplazamiento en EditText Android
- Selector de rango / rango de barra de búsqueda para recortar el video, incluidas las miniaturas