¿Cuál es la forma recomendada de usar Google Map v2 dentro del fragmento?

Quiero agregar el fragmento del mapa dentro del diseño personalizado.

  1. Puedo hacerlo usando ChildFragmentManager que agregará SupportMapFragment. Este enfoque estoy usando actualmente. Sin embargo tiene desventaja porque la transacción del fragmento del niño es asíncrona y su duro garantizar que el getMap no volverá null.
  2. Otra forma es extender SupportMapFragment store mapView de super onCreateView

    mapView = super.onCreateView(inflater, container, savedInstanceState);

    E insertarlo en la disposición inflado. El principal problema es que luego fragmento tratar de restaurar desde el estado guardado Google Maps SDK se aplasta internamente.

¿Hay alguna otra manera de resolver este problema. Sería genial que alguien del equipo de Google Map recomiende el enfoque correcto porque no ha incluido nada como esto en las muestras.

Todos los FragmentTransaction s son asíncronos. Si desea que su transacción ocurra inmediatamente, tendrá que forzarlos a través de la siguiente manera:

 getChildFragmentManager().beginTransaction.add(R.id.container, new MyMapFragment(), "MyMapFragment").commit(); getChildFragmentManager().executePendingTransactions(); /* getMap() should not return null here */ 

Desde el sitio para desarrolladores de Android :

Después de que se compromete un FragmentTransaction con FragmentTransaction.commit() , está programado para ejecutarse asincrónicamente en el subproceso principal del proceso. Si desea ejecutar inmediatamente cualquier operación pendiente, puede llamar a esta función (sólo desde el hilo principal) para hacerlo. Tenga en cuenta que todas las devoluciones de llamada y otros comportamientos relacionados se realizarán desde esta llamada, así que tenga cuidado acerca de dónde se llama.

Devoluciones
Devuelve true si hay alguna transacción pendiente que se va a ejecutar.

Puede utilizar MapView dentro de su Fragmento (o Actividad), esto le permitirá usar cualquier diseño que desee.

Es decir, su diseño puede verse así:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <com.google.android.gms.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> 

También necesitará reenviar los métodos de ciclo de vida de Fragment como onCreate, onResume y así sucesivamente al MapView.

La única diferencia (parece ser un error en Google Maps?) Es que también es necesario inicializar manualmente Google Maps:

 private void setUpMapIfNeeded() { if (mMap == null) { mMap = mMapView.getMap(); if (mMap != null) { // Thought official docs says that it is not necessary to call // initialize() method if we got not-null GoogleMap instance from // getMap() method it seems to be wrong in case of MapView class. try { MapsInitializer.initialize(getActivity()); setUpMap(mMap); } catch (GooglePlayServicesNotAvailableException impossible) { mMap = null; } } } } 
  • ¿Cómo conservar una vista de mapa dentro de un fragmento?
  • Obtener altitud por longitud y latitud en Android
  • Dibujo es constantemente llamado en mi superposición de mapa de Android
  • Cómo dibujar una imagen de marcador pequeño y mantener la actualización de su posición en mi imagen de mapa PERSONALIZADO? - Android
  • ¿Cómo calcular un radio alrededor de un punto en un MapView de Android?
  • Adición de una capa KML a una aplicación de mapas de Android
  • Android: automáticamente elige debug / release Maps clave api?
  • ¿Cómo puedo manejar el cambio de mapa usando Google Maps para Android V2?
  • Cómo ampliar un MapView para que siempre incluye dos geopuntos?
  • ¿Cómo puedo dibujar una flecha que muestre la dirección de manejo en MapView?
  • Error al inflar la clase com.readystatesoftware.maps.TapControlledMapView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.