My Android application has an ActionBar
that changes which Fragment
occupies a certain FrameLayout
. I am trying to use onSaveInstanceState
to save the state of a Fragment when the tab is changed, so that it can be recovered in onCreateView
.
The problem is, onSaveInstanceState
is never called. The Fragment
's onDestroyView
and onCreateView
methods are called, but the Bundle
supplied to onCreateView
remains null.
Can someone please explain to me when onSaveInstanceState
is actually called, how I can make sure it gets called when switching tabs, or the best practice for saving and restoring the state of a Fragment
when it is detached and re-attached?
Fragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.event_log, container, false);
// Retrieve saved state
if (savedInstanceState != null){
System.out.println("log retrieved");
} else {
System.out.println("log null");
}
return view;
}
@Override
public void onSaveInstanceState(Bundle outState) {
System.out.println("log saved");
super.onSaveInstanceState(outState);
// more code
}
Activity:
/**
* Detach the current Fragment, because another one is being attached.
*/
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (tab.getText().equals(getString(R.string.tab_events))){
if (frEventLog != null) {
ft.detach(frEventLog);
}
}