При использовании FragmentActivity
он автоматически восстанавливает состояние фрагмента и воссоздает все фрагменты.Как работает автоматическое восстановление фрагментов
Я знаю, что это делается в основном с сохранением состояния в onSaveInstanceState
, а затем восстановлено в действии onCreate
. Немного о коде, который я видел, что все фрагменты воссозданы (или только прикреплены, если preserveInstance истинно) и добавлены в FragmentManager
, но мне непонятно, каким образом они добавляются в представление, поскольку представление не является автоматически восстанавливается.
Мои первоначальные проблемы заключались в том, что я получаю дубликаты некоторых фрагментов, подобных that other question. я workarrounded что в onCreate
с:
Fragment f = fm.findFragmentByTag(tagName);
if(f==null) {
f = createFragment();
fm.beginTransaction().add(R.id.myContainer,f,tagName).commit();
} else {
//Nothing it's on the view
}
Сейчас он работает, но я до сих пор совершенно не понимаю, как это работает.
Мои сомнения:
- В какой момент и как фрагменты прикреплены к View? Я экспериментировал, что восстановление фрагмента выполняется в
onCreate
отFragmentActivity
. Но если я позвонюsetContentView
после этого, как фрагмент присоединяется к представлению? - Могу ли я предотвратить восстановление фрагмента без перезаписи
onSaveInstanceState
? Поскольку из-за разных макетов ориентации с разным количеством фрагментов мое первоначальное намерение состояло в том, чтобы воссоздать только один фрагмент состояния, отмеченный как сохраненный, не восстанавливать другие фрагменты представления, которые не отмечены как сохраненные.