Использовал бы Navigation Architecture Component.
Создание NavGraph: Определил бы Destinations (фрагменты или Activity) и Actions (переходы между ними) в XML-ресурсе.
xml
Размещение NavHost: Добавил бы NavHost (например, NavHostFragment) в макет Активити, к которому привязан NavGraph.
xml
Добавление кнопок навигации: Использовал бы BottomNavigationView или отдельные кнопки. Для BottomNavigationView привязал бы его к NavController.
xml
Обработка нажатий кнопок в коде: Получал бы экземпляр NavController и вызывал бы navigate() при нажатии на кнопку. NavController автоматически управляет back stack, сохраняя предыдущие Destination.
kotlin
Для более сложной навигации с несколькими вкладками (BottomNavigationView, DrawerLayout) использовал бы setupWithNavController().
kotlin
Navigation Component по умолчанию обрабатывает back stack. Нажатие кнопки "Назад" будет возвращать пользователя к предыдущему destination в back stack. Для управления поведением back stack при navigate() можно использовать NavOptions с popUpTo.