I have a nested fragment that i would like to maintain the state when the device orientation changed.
It is something like this:
I'm instantiate a mapView in the nested fragment and when the device is rotated the user must be in the same place where it was.
How can I accomplish this?
Thank you
Ok, so i was making a mistake.
I was calling the function setRetainInstance(true) on the fragment parent and i shouldn't.
After deleting that line, it was very simple to keep the map state on device orientation.
All i had to do was to save some values on onSaveInstanceState like this:
bundle.putDouble("lat", mMap.getCameraPosition().target.latitude);
bundle.putDouble("lon", mMap.getCameraPosition().target.longitude);
bundle.putFloat("zoom", mMap.getCameraPosition().zoom);
Then on onCreate, i restore the map state like this:
bundle.getDouble("lat");
bundle.getDouble("lon");
bundle.getDouble("zoom");
You could use it like this because CameraPosition
class implements Parcelable
:
- save it
if (null != mMap) {
outState.putParcelable("map_camera_position", mMap.getCameraPosition());
}
- retrieve it in
onCreate()
if (null != savedInstanceState) {
mCameraPosition = savedInstanceState.getParcelable("map_camera_position");
}
- set it to move the camera
if (null != mCameraPosition) {
mMap.moveCamera(CameraUpdateFactory.newCameraPosition(mCameraPosition));
}