В настоящее время я решаю проблему с Android и его циклом повторного создания при повороте экрана:
У меня есть одно действие и множество фрагментов (Support-V4). Например, вход в систему выполняется в одном действии с фрагментом, когда вход в систему, приложение меняет свое поведение навигации и использует несколько фрагментов, я сделал это, потому что передача данных между фрагментом A и фрагментом B намного проще, чем передача данные между действием A и действием B.
Итак, моя проблема возникает, когда я поворачиваю устройство, при первом подходе начальный фрагмент был загружен, но что произойдет, если пользователь на странице 15 и повернет свое устройство, он вернется к фрагменту 1 и даст очень плохой пользовательский опыт. Я настроил все свои фрагменты так, чтобы они сохраняли свой экземпляр, и добавил это в MainActivity при создании:
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
initBackStackManager();
initControllers();
mayDownloadData();
setTitle();
if(savedInstanceState == null){
addAreaFragment();
}
}
Теперь первый фрагмент не загружается после изменения ориентации экрана, но если я пытаюсь выполнить транзакцию фрагмента, он говорит Невозможно выполнить FragmentTransaction.commit() после onSaveInstanceState(), есть ли способ справиться с этим? Или мне действительно нужно использовать несколько действий с встроенным фрагментом?
Большое спасибо!
EDITED Я забыл добавить, что это происходит только для определенного фрагмента... Например, у меня есть следующий поток фрагментов:
AreaFragment -> WaiterSelectionFragment -> WaiterOptionsFragment.
Если я нахожусь в AreaFragment и вращаю устройство, я все равно могу добавлять/заменять фрагменты, и ничего не происходит, никакой ошибки не возникает. Если я нахожусь в WaiterSelectionFragment, ошибок тоже не возникает. НО, если я нахожусь в WaiterOptionsFragment, возникает ошибка. WaiterSelectionFragment имеет следующую структуру:
- LinearLayout
- Фрагменттабхост
Внутри FragmentTabHost есть несколько фрагменты, и именно здесь происходит ошибка. Вы можете задаться вопросом Почему FragmentTabHost? Просто клиент хочет, чтобы это приложение отображало панель вкладок. Если я использую нативные вкладки Android, вкладки перестраиваются на панель действий при Альбомная позиция.
ИЗМЕНИТЬ 2
Я использовал метод, предоставленный @AJ Macdonald, но пока безуспешно. У меня есть текущий фрагмент, сохраняемый методом onSaveInstanceState(Bundle)
, и я восстанавливаю свой фрагмент методом onRestoreInstanceState(Bundle)
в Android Activity, я восстанавливаю кнопку назад и текущий фрагмент strong>, но когда я добираюсь до третьего фрагмента, ошибка все еще возникает. Я использую ViewPager, который содержит 4 фрагмента. Будет ли это причиной проблемы? Только в этом разделе приложения происходит. У меня есть 4 (основной рабочий процесс) фрагмента, в первом, втором и третьем фрагменте нет ошибок, которые он представляет, только на ViewPager.