Ответ
Jetpack Navigation - основной фреймворк, использующий граф навигации, NavController и NavHostFragment. Позволяет удобно работать с фрагментами, поддерживает deep links, анимации переходов.
Пример:
findNavController().navigate(R.id.action_details)
Также работал с:
- Cicerone - легковесный фреймворк для навигации между экранами (основан на Router-Command подходе)
- Compose Navigation - навигация в Jetpack Compose через
NavHostиcomposabledestinations - Custom решения на Activity + FragmentManager для простых случаев
Основные преимущества Jetpack Navigation - интеграция с Android Studio, безопасность типов через Safe Args, поддержка back stack из коробки.
Ответ 18+ 🔞
Ну смотри, вот навигация в андроиде — это вообще отдельная песня. Если раньше мы там руками всё пилили, то сейчас, блядь, хоть какие-то готовые костыли есть. Главный сейчас — это Jetpack Navigation, ёпта.
Представь себе, что твоё приложение — это такой ёперный театр с кучей комнат-экранов. Jetpack Navigation — это, по сути, режиссёр и карта этого театра в одном флаконе. У тебя есть граф навигации (это и есть карта, где что лежит), есть NavController (это режиссёр, который говорит «сейчас показываем вот это!»), и есть NavHostFragment — это, бля, сцена, на которой все эти фрагменты меняются.
Работает это до безобразия просто. Хочешь перейти на другой экран? Одна строчка, и всё:
findNavController().navigate(R.id.action_details)
И всё, чувак! Ты уже там. Не надо никакого ручного FragmentTransaction, add/replace, addToBackStack — эта мартышлюшка всё за тебя делает. Плюс ещё deep links встроены, анимации переходов — красота, ядрёна вошь!
Но я, конечно, не на одном этом сидел. Пробовал и другие штуки.
- Cicerone — это такой лёгкий, почти что хипстерский фреймворк. Там подход другой — не граф, а роутер, который команды отдаёт. Как таксист, который знает короткие пути. Лёгкий, быстрый, но, бля, функционала поменьше, всё-таки народная самоделка.
- Compose Navigation — это уже для современных дел, когда весь интерфейс на Compose пишешь. Там вместо фрагментов —
composableфункции, а вместоNavHostFragment— простоNavHost. Принцип тот же, но внутри всё по-другому, потому что Compose — это другая вселенная, чувак. - Ну и бывало, делал кастомные решения на Activity + FragmentManager. Когда приложение — простая «читалка» из трёх экранов, зачем тебе овердохуища библиотек? Иногда проще на коленке скрутить, чем подключать целый космический корабль.
А теперь, бля, главный вопрос: почему все так любят именно Jetpack Navigation? Ну, во-первых, он от гугла, с ним в Android Studio удобно работать — граф навигации прямо в дизайнере видишь. Во-вторых, Safe Args — это такая штука, которая передачу параметров между экранами делает типобезопасной. Раньше в Bundle ключи-строки писали и молились, чтобы не опечататься, а теперь — всё проверяется на этапе компиляции, доверия ебать ноль, но зато надёжно. И в-третьих, back stack из коробки — то есть кнопка «назад» работает как часы, без твоих костылей.
В общем, инструмент годный. Не без косяков, конечно, но жить можно. Главное — понять, как эта карта-граф работает, а там уже попрёшь.