When I launched my app, at the first time setPrimaryItem()
was called, I added a new fragment to the host activity. This fragment got the data set from the current fragment on viewpager. I added it inside setPrimaryItem()
because I wanted to make sure the addition fragment would be created after creating viewpager fragments.
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
if (latestFragment == null) {
latestFragment = (ViewPagerFragment) object;
addAdditionFragment();
}
latestFragment = (ViewPagerFragment) object;
super.setPrimaryItem(container, position, object);
}
This is what happened when I run my app:
HostActivity.setPrimaryItem();
ViewPagerFragment.onAttach();
ViewPagerFragment.onCreate();
ViewPagerFragment.onCreateView();
ViewPagerFragment.onActivityCreated();
ViewPagerFragment.onStart();
ViewPagerFragment.onResume();
AdditionFragment.onAttach();
AdditionFragment.onCreate();
AdditionFragment.onCreateView();
AdditionFragment.onActivityCreated();
AdditionFragment.onStart();
AdditionFragment.onResume();
After I minimized my app to the background and opened some other apps. I went back to the app, HostActivity and fragments were created again. I didn't see the activity as well as my fragments were destroyed since I minimized my app, only onStopped()
was called.
This is what happened:
ViewPagerFragment.onAttach();
ViewPagerFragment.onCreate();
AdditionFragment.onAttach();
AdditionFragment.onCreate();
ViewPagerFragment.onCreateView();
ViewPagerFragment.onActivityCreated();
AdditionFragment.onCreateView();
AdditionFragment.onActivityCreated();
ViewPagerFragment.onStart();
ViewPagerFragment.onResume();
AdditionFragment.onStart();
AdditionFragment.onResume();
As you can see, AdditionFragment was created at the beginning even though setPrimaryItem()
was not called. The data AdditionFragment tried to get from a ViewPager fragment was null since latestFragment was null.