2015-09-15 4 views
0

У меня есть приложение для Android, в котором я хочу динамически добавлять и удалять фрагменты в ViewPager во время выполнения и сохранять фрагменты при изменениях конфигурации.Сохранить состояние динамического ViewPager

До сих пор я реализовал FragmentStatePagerAdapter, держа мои фрагменты в списке с методами add, remove и replace манипулировать мои фрагменты. В основном, все, что они делают, это вставить или удалить фрагмент в списке, а затем позвонить notifyDatasetChanged(). Я вставляю искомый фрагмент в качестве нового фрагмента во время действия onCreate().

Я знаю, что хочу сохранить свои фрагменты во время изменений конфигурации. В настоящее время, когда я меняю ориентацию на экране, все мои фрагменты в настоящее время удаляются, и я возвращаюсь к исходному фрагменту, естественно, потому что активность воссоздана, а Фрагмент и Адаптатор восстанавливаются во время вызова onCreate(). Я пытался сохранить состояние адаптера с Adapter.saveInstance() во время действий onPause(), но когда я попытаюсь восстановить его через Adapter.restoreInstance(), я получаю пустой адаптер.

Может ли кто-нибудь дать мне подсказку о том, что является правильным способом в Android, чтобы сохранить состояние FragmentStatePagerAdapter?

ответ

1

Чтобы сохранить состояние фрагмента текущего, я думаю, что прежде всего вам нужно будет проверить, какой фрагмент в настоящее время добавлен/видим в активности контейнера. Если у вас есть этот фрагмент, просто используйте метод onSaveInstanceState() операции контейнера, чтобы сохранить экземпляр текущего фрагмента.

Для фрагмента кода, пожалуйста, следуйте по ссылке this.

+0

Спасибо, это было то, что я искал. Мне пришлось поместить его в цикл for(), чтобы сохранить все фрагменты в моем адаптере, но, похоже, он работает так, как ожидалось. –

+0

Ну, это действительно работает только для ограниченного количества фрагментов. Когда я хочу сохранить фрагменты, отсутствующие более одного экрана моего текущего фрагмента, я получаю ошибку «Фрагмент не в FragmentManager». Любые намеки на это? –

+0

В onSaveInstanceState() вы сохраните только тот фрагмент, который в настоящее время прикреплен/видим пользователю. Итак, в следующий раз, когда пользователь повторно создаст активность при повороте экрана, он вернется к тому же самому фрагменту, который был последним. Таким образом, за один раз вы увидите только один фрагмент, видимый в вашей активности с контейнером –