Восстановление ViewPager после уничтожения приложения
Activity содержит ViewPager с несколькими вкладками, заполняемыми фрагментами. Когда система выгружает приложение из памяти из-за нехватки ресурсов, при восстановлении приложения, восстанавливается та же самая Activity, к ней прикрепляются экземпляры фрагментов существовашие в момент уничтожения. При этом в Activity.onCreate содержится стандартная логика создания и заполнения ViewPager фрагментами:
ViewPagerAdapter pagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), ProjectActivity.this);
for (ProjectData projectData : projectData) {
pagerAdapter.addFragment(ProjectFragment.newInstance(projectData));
}
viewPager.setAdapter(pagerAdapter);
В итоге Activity содержит ссылки на вновь созданные экземпляры фрагментов, а прикреплены к ней старые (восстановленные) экземпляры фрагментов. В данный момент принято решение - при старте Activity проверка пустой ли стек фрагментов, если нет - удаление существующих фрагментов, и стандартное заполнение адаптера новыми экземплярами фрагментов:
FragmentManager fragmentManager = getSupportFragmentManager();
List<Fragment> oldFragments = fragmentManager.getFragments();
if (!oldFragments.isEmpty()) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
for (Fragment fragment: oldFragments) {
transaction.remove(fragment);
}
transaction.commit();
fragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
for (ProjectData projectData : projectData) {
pagerAdapter.addFragment(ProjectFragment.newInstance(projectData));
}
viewPager.setAdapter(pagerAdapter);
Подозреваю что это не верное решение, а как стандартно решить этот вопрос?
Также не понимаю почему при вызове viewPager.setAdapter(pagerAdapter)
новые экземпляры фрагментов загруженные в адаптер не проходят свой жизненный цикл пока не очистишь стек фрагментов.