Why use Fragment#setRetainInstance(boolean)?

android, android-fragments, android-lifecycle

Solution

How do you as a developer use this

Call `setRetainInstance(true)`. I typically do that in `onCreateView()` or `onActivityCreated()`, where I use it.

and why does it make things easier?

It tends to be simpler than `onRetainNonConfigurationInstance()` for handling the retention of data across configuration changes (e.g., rotating the device from portrait to landscape). Non-retained fragments are destroyed and recreated on the configuration change; retained fragments are not. Hence, any data held by those retained fragments is available to the post-configuration-change activity.

Problem

I find Fragment#setRetainInstance(true) confusing. Here is the Javadoc, extracted from the Android Developer API: public void setRetainInstance (boolean retain) Control whether a fragment instance is retained across Activity re-creation (such as from a configuration change). This can only be used with fragments not in the back stack. If set, the fragment lifecycle will be slightly different when an activity is recreated: - onDestroy() will not be called (but onDetach() still will be, because the fragment is being detached from its current activity). - onCreate(Bundle) will not be called since the fragment is not being re-created. - onAttach(Activity) and onActivityCreated(Bundle) will still be called. Question: How do you as a developer use this, and why does it make things easier?

Original source

Related problems