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?

¿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(); } 
  • Google Maps y las aplicaciones con mapview tienen diferentes posiciones actuales
  • Google Maps API v2: LatLngBounds de CameraPosition
  • ¿Cómo centrar la cámara para que el marcador esté en la parte inferior de la pantalla? (Google map api V2 Android)
  • Obtenga latitud y longitud de la base de datos SQLite para usarla en Android MapOverlay
  • ¿Cómo mostrar un globo sobre un marcador en una MapActivity? ¿No hay un widget?
  • ¿Cómo puedo mostrar el mapa de inclinación en Android?
  • Google Maps V2 muestra pantalla en blanco en Android 2.2
  • MapView dentro de ScrollView?
  • Error en la autorización de Google Maps para Android API v2
  • Lo que hace que mi fragmento de mapa de carga lento?
  • 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.