I have a fragment which has its own state (selected buttons, etc). That state is lost on a screen rotation.
The activity that contains the fragment has a portrait la
If the fragment needs a different layout resource when rotated, setRetainInstance(true)
cannot be used. This page shows the lifecycle of fragment with setRetainInstance(true)
.
Original idea is use onSaveInstanceState()
to retain all members data, just like a regular Activity. However, for some reason, onSaveInstanceState()
is not get called. But FragmentActivity
is correct, as @Eric Kok suggested). The best solution I found is to use Arguments of Fragment.
See the solution by Fyodor Volchyok, it is simple. Just work as if the outState
in onSaveInstanceState(), and savedInstanceState
in onViewCreated().
You can enable myFragment.setRetainInstance(true)
to retain the state, but it does this 'automatically', i.e. it retains the values assigned to your class members and does NOT use the onSaveInstanceState (and hence savedInstanceState is always null).
Make sure the FragmentActivity
that hosts this fragment does not override onSaveInstanceState
or when it does it should call super.onSaveInstanceState(Bundle)
.