Guardar el estado de MapFragment (Maps v2) en Android

Estoy trabajando con la nueva API de GoogleMaps (v2) y tengo algunos problemas con el fragmento. Tengo dos fragmentos en mi aplicación (Mapa, Lista) y el usuario puede cambiar entre ellos. Funciona bien hasta ahora con este código:

if (itemPosition == 0) { getSupportFragmentManager().beginTransaction() .replace(R.id.fragmentpos, myMapFragment).commit(); } else if (itemPosition == 1) { getSupportFragmentManager().beginTransaction() .replace(R.id.fragmentpos, myListFragment).commit(); }...... 

Cuando trabajo con el mapa, cambie al fragmento de lista y luego de nuevo al fragmento de mapa, la última posición del mapa no se guarda. Esto no es lo que quiero, quiero que el mapa está en el estado de guardar como "izquierda" que .. ¿Cómo puedo lograr esto? He intentado guardar la posición de la cámara en

 public void onSaveInstanceState(Bundle outState){ outState.putDouble("LAT", mMap.getCameraPosition().target.latitude); outState.putDouble("LON", mMap.getCameraPosition().target.longitude); outState.putFloat("BEAR", mMap.getCameraPosition().bearing); ... 

}

Y restaurarlo en onCreateView (), pero el Bundle siempre es nulo. El onSaveInstanceState no se llama si reemplazo los fragmentos.

Entonces, ¿cómo puedo guardar el estado del mapa?

2 Solutions collect form web for “Guardar el estado de MapFragment (Maps v2) en Android”

¿Cómo puedo lograr esto?

Si replace() un fragmento, las vistas del fragmento antiguo se destruyen, lo que saca su MapView y, presumiblemente, la CameraPosition .

onSaveInstanceState() es principalmente para cambios de configuración, como rotaciones de pantalla. MapFragment y MapFragment ya conservan CameraPosition (que, BTW, es Parcelable , por lo que puede guardar todo el objeto en el Bundle lugar de fragmentarse).

Usted podría considerar el uso de show() y hide() lugar de replace() , por lo que el fragmento y sus puntos de vista se pega.

He resuelto este problema manteniendo una referencia a la CameraPosition en el mapa en el método onDestroyView() del fragmento; Luego usar esa CameraPosition al reinstaurar el mapa.

El contexto de mi solución tiene sus propias peculiaridades, pero esencialmente tengo un fragmento de mapa anidado dentro de otro fragmento (al cual estoy esperando, incluso después de que sea reemplazado). Así que este es el código en el método onActivityCreated() del fragmento padre:

  GoogleMapOptions mapOptions = new GoogleMapOptions(); if(_savedCameraPosition != null) { mapOptions.camera(_savedCameraPosition); } else { // Centre on Australia mapOptions.camera(CameraPosition.fromLatLngZoom(new LatLng(-24.25, 133.25), 15)); } _mapFragment = new SupportMapFragment().newInstance(mapOptions); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.map_holder, _mapFragment); fragmentTransaction.commit(); 

Entonces más adelante en la misma clase tengo:

 @Override public void onDestroyView() { super.onDestroyView(); _savedCameraPosition = _map.getCameraPosition(); } 
  • ¿Puedo usar AnimationDrawable en una superposición en un MapView?
  • Crear un archivo GPX desde GeoPoints
  • Error en la autorización de Google Maps para Android API v2
  • ¿Hay algún límite para dibujar la ruta usando Geocoder (Android)?
  • ¿Cómo centrar la cámara para que el marcador esté en la parte inferior de la pantalla? (Google map api V2 Android)
  • ¿Cómo mostrar un globo sobre un marcador en una MapActivity? ¿No hay un widget?
  • Cómo cambiar la Barra de Acción al tocar el mapa como Uber
  • Las vistas no se actualizan hasta que se toca MapView
  • Personalizar el esquema de colores de google maps V2 en android
  • Cómo colocar marcador de ubicación en Google Maps en Offline?
  • Google maps api v2 zoom cerca del marcador
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.