Какие методы есть у FragmentManager и их назначение
Что проверяют
Работали ли вы с фрагментами напрямую, а не только через Navigation Component, и понимаете ли асинхронность транзакций. Следом обычно спрашивают про IllegalStateException после onSaveInstanceState и про разницу между parentFragmentManager и childFragmentManager.
Как отвечать
Сначала скажите, откуда берётся менеджер: supportFragmentManager в FragmentActivity, childFragmentManager для вложенных фрагментов, parentFragmentManager у фрагмента для работы с соседями. Дальше методы по группам:
- транзакции:
beginTransaction()возвращаетFragmentTransactionсadd,replace,remove,setReorderingAllowed(true),addToBackStack(name). В Kotlin удобнее расширениеcommit { }изfragment-ktx; - поиск:
findFragmentById(),findFragmentByTag(), свойствоfragments; - back stack:
popBackStack()асинхронный,popBackStackImmediate()синхронный,popBackStack(name, POP_BACK_STACK_INCLUSIVE)снимает всё до записи включительно. ПлюсbackStackEntryCount,getBackStackEntryAt(),addOnBackStackChangedListener(); - несколько стеков:
saveBackStack(name)иrestoreBackStack(name)для нижней навигации с отдельной историей на каждой вкладке; - обмен данными:
setFragmentResult()иsetFragmentResultListener()вместо прямых ссылок между фрагментами; - служебные:
executePendingTransactions(),isStateSaved,fragmentFactoryдля фрагментов с зависимостями в конструкторе,registerFragmentLifecycleCallbacks()для логирования.
Отметьте, что commit() принадлежит транзакции, а не менеджеру, и бывает в четырёх вариантах: commit() ставит в очередь, commitNow() выполняет сразу, но несовместим с addToBackStack(), плюс версии AllowingStateLoss.
Где спотыкаются
Вызывают findFragmentByTag() сразу после commit() и получают null: транзакция ещё не выполнена.
Лечат IllegalStateException после сохранения состояния через commitAllowingStateLoss() везде подряд. Ошибка пропадает, а при восстановлении экрана транзакция теряется.
Путают менеджеры: добавляют вложенный фрагмент через parentFragmentManager, и он становится соседом родителя, а не дочерним фрагментом.