Когда я запустил свое приложение, при первом вызове setPrimaryItem()
я добавил новый фрагмент к активности хоста. Этот фрагмент получил набор данных из текущего фрагмента на viewpager. Я добавил его внутрь setPrimaryItem()
, потому что я хотел убедиться, что фрагмент добавления будет создан после создания фрагментов окна просмотра.
@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);
}
Вот что произошло, когда я запустил свое приложение:
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();
После того, как я свернул свое приложение в фоновом режиме и открыл некоторые другие приложения. Я вернулся к приложению, HostActivity и фрагменты были созданы снова. Я не видел действия, так как мои фрагменты были уничтожены, так как я свернул свое приложение, только onStopped()
был вызван.
Вот что произошло:
ViewPagerFragment.onAttach();
ViewPagerFragment.onCreate();
AdditionFragment.onAttach();
AdditionFragment.onCreate();
ViewPagerFragment.onCreateView();
ViewPagerFragment.onActivityCreated();
AdditionFragment.onCreateView();
AdditionFragment.onActivityCreated();
ViewPagerFragment.onStart();
ViewPagerFragment.onResume();
AdditionFragment.onStart();
AdditionFragment.onResume();
Как видите, AdditionFragment был создан в начале, хотя setPrimaryItem()
не был вызван. Данные, которые AdditionFragment пытался получить из фрагмента ViewPager, были нулевыми, поскольку lastFragment был нулевым.