С какими фреймворками для навигации работал

Ответ

Jetpack Navigation - основной фреймворк, использующий граф навигации, NavController и NavHostFragment. Позволяет удобно работать с фрагментами, поддерживает deep links, анимации переходов.

Пример:

findNavController().navigate(R.id.action_details)

Также работал с:

  • Cicerone - легковесный фреймворк для навигации между экранами (основан на Router-Command подходе)
  • Compose Navigation - навигация в Jetpack Compose через NavHost и composable destinations
  • 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 из коробки — то есть кнопка «назад» работает как часы, без твоих костылей.

В общем, инструмент годный. Не без косяков, конечно, но жить можно. Главное — понять, как эта карта-граф работает, а там уже попрёшь.