Как бы реализовал NavGraph на FragmentManager

«Как бы реализовал NavGraph на FragmentManager» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для реализации NavGraph на FragmentManager можно использовать FragmentTransaction и теги. Вот пример:

supportFragmentManager.beginTransaction()
    .replace(R.id.container, MyFragment::class.java, null, "my_fragment_tag")
    .addToBackStack("my_fragment_tag")
    .commit()

Ключевые моменты:

  1. Используйте replace() вместо add() для замены фрагментов
  2. Указывайте тег для идентификации фрагмента
  3. addToBackStack() позволяет навигацию назад
  4. Для обработки нажатия "Назад" переопределите onBackPressed():
override fun onBackPressed() {
    if (supportFragmentManager.backStackEntryCount > 0) {
        supportFragmentManager.popBackStack()
    } else {
        super.onBackPressed()
    }
}

Недостатки такого подхода:

  • Нет встроенной анимации переходов
  • Сложнее обрабатывать глубокие ссылки
  • Больше boilerplate кода по сравнению с Navigation Component