Saving MapFragment (Maps v2) State in Android

android, android-fragmentactivity, android-fragments, android-maps

Solution

How can I accomplish this?

If you `replace()` a fragment, the old fragment's views are destroyed, which takes out your `MapView` and, presumably, the `CameraPosition`.

`onSaveInstanceState()` is mostly for configuration changes, such as screen rotations. `MapFragment` and `SupportMapFragment` already retain the `CameraPosition` (which, BTW, is `Parcelable`, so you can save the whole object in the `Bundle` rather than piecemeal).

You could consider using `show()` and `hide()` instead of `replace()`, so the fragment and its views sticks around.

Problem

I'm working with the new GoogleMaps API (v2) and have some problems with the fragment. I have two fragments in my app (Map, List) and the user can switch between them. Works fine so far with this code: ``` if (itemPosition == 0) { getSupportFragmentManager().beginTransaction() .replace(R.id.fragmentpos, myMapFragment).commit(); } else if (itemPosition == 1) { getSupportFragmentManager().beginTransaction() .replace(R.id.fragmentpos, myListFragment).commit(); }...... ``` When I work with the map, switch to the list fragment and then back to the map fragment, the last position of the map is not saved. This is not what i want, i want that the map is in the save state as i "left" it.. How can I accomplish this? I tried to save the camera position in ``` 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); ... ``` } and restore it in onCreateView(), but the Bundle is always null. The onSaveInstanceState is not called if I replace the fragments. So how can I save the state of the map?

Original source

Related problems