Восстановление ViewPager после уничтожения приложения

Рейтинг: 1Ответов: 0Опубликовано: 09.02.2023

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) новые экземпляры фрагментов загруженные в адаптер не проходят свой жизненный цикл пока не очистишь стек фрагментов.

Ответы

Ответов пока нет.