Как стать автором
Обновить

Комментарии 12

Вам нравится NavigationComponent (даже с учетом всех этих костылей)? Намного удобнее роутинга через какую-нибудь абстракцию с ручной работой с FragmentManager?

Привет!
Если кратко — мне НЕ нравится Navigation Component =)

Для мелких приложений, где у вас не будет никаких сложных вложенных навигационных графов, где не будет нижней навигации, дип линков, а будет просто переход с одного экранчика на другой — Navigation Component не так уж плох. Работать с графическим редактором, в котором можно мышкой добавлять экраны, и создавать для него переходы очень даже удобно. И это точно удобнее ручной работы с FragmentManager.

Но для больших приложений — лучше выбрать другую библиотеку или самому что-то сделать.

Привет!
Какие альтернативные библиотеки могли бы посоветовать, кроме чичерони (по мне, так она тоже полна недостатков)?

Если вы спрашиваете про сегодняшний день, то — Cicerone, который, всё-таки, решает гораздо больше проблем, чем добавляет)

Если про недалёкое будущее, то, может быть в Jetpack Compose будет уже меньше проблем с этим. Не помню уже где, но видел там какие-то конструкции вида:

Crossfade(navigationViewModel.currentScreen) { screen ->
    when (screen) {
        is Screen.Home -> HomeScreenComponent()
        is Screen.Articles -> ArticlesScreenComponent()
    }
}


Выглядит неплохо =)

Вопрос слегка не в тему. Но откуда пошло желание иметь отдельный бекстек для каждой боттом вкладки? Если есть ссылки на хорошие статьи почему это хорошо и улучшает юзабилити/ux/и тд, то был бы рад..

Привет!
Почему же не в тему, вполне в тему. Каких-то исследований сходу не могу привести, не натыкался, кажется.

Но отдельный back stack нужен, если вы хотите:

а) по кнопке назад возвращаться на предыдущий экран в той же самой вкладке даже после переключения между вкладками. Например, в соискательском приложении hh.ru вы можете открыть вкладку «Профиль», там открыть своё резюме, потом переключиться на вкладку «Избранное», там открыть какую-то вакансию. Если вы после этого переключитесь на «Профиль» и нажмёте кнопку Back, вас перебросит на предыдущий экран именно во вкладке «Профиль», а не на экран во вкладке «Избранное».

б) Если хотите сохранять пройденный пользователем путь в отдельной вкладке — опять же, вы можете в соискательском приложении hh.ru открыть какую-то вакансию на первой вкладке, открыть из неё ещё кучу других вакансий, потом переключиться на вкладку «Избранное» и сделать там тоже самое. Когда вы переключитесь обратно на первую вкладку, вы сможете повторить весь путь обратно до стартового экрана вкладки.

Имхо, это улучшает UX, я был бы недоволен приложением, если бы информация, которую я так долго искал внутри вкладки, куда-то пропала.
Спасибо за статью, ещё раз убеждаюсь, что Nav Component не очень удачная библиотека, мягко говоря.
Мало того, что половина фич не работает (работает коряво), так ещё и куча крашей.
Уж лучше написать руками с FragmentManager, чем насиловать себя этой библиотекой.
Ещё больше печалит тот факт, что с коллегами периодически возникают холивары на эту тему и лагерь разделился 50/50.
Привет!
Могу только посоветовать дождаться продолжения статьи, или скинуть коллегам посмотреть её видео-вариант — очень может быть, что появятся новые аргументы за / против =)
Спасибо, а следующие статейки примерно когда ждать?
Привет!
Вторая часть — на следующей неделе, и третья — через неделю после второй.

В качестве альтернативы предлагаю посмотреть видео. Там, по сути, тоже самое. Разве что я в статью мелкие добавления вставляю, которые не поместились в доклад.
К сожалению с английским на слух так себе. Правда с этим можно было бы смириться, за исключением некоторых моментов осилил скорее всего бы, вот только я очень не люблю сам формат видео, предпочитаю текст. Потому буду ждать продолжения!
Заюзал, добавил в onCreate() и onRestoreInstanceState() — все работало отлично. Меняю системную тему на темную или светлую: java.lang.IllegalStateException: Fragment androidx.navigation.fragment.NavHostFragment did not create a view.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий