Jetpack Navigation. Как сделать навигацию в Android удобной? [Ru, Kotlin\Android]

Поділитися
Вставка
  • Опубліковано 27 гру 2024

КОМЕНТАРІ • 89

  • @Densoll
    @Densoll 9 місяців тому +2

    Блин спасибо тебе большое, очень много пересмотрел видосов с этой навигацией засратой, как её правильно реализовать с single activity и вот наткнулся на твой ролик 21 года, ещё раз спасибо, очень сильно помог, так как пишу диплом) 🤝

  • @СергейПанов-з3ц
    @СергейПанов-з3ц 3 роки тому +1

    Спасибо!

  • @mccokol7536
    @mccokol7536 2 роки тому +1

    Блин!! как я благодарен автору! Все сразу стало по местам, а то "эти" курсы...

  • @killonstar
    @killonstar Рік тому +2

    Немного сумбурное объяснение работы с модулями получилось, но если потом разобрать проект самому, то все становится ясно. Спасибо за проделанную работу!

  • @Vlad_Gromov_1992
    @Vlad_Gromov_1992 3 роки тому +16

    Ждем выпуск про многомодульность

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому +1

      Это большая тема да )

    • @Vlad_Gromov_1992
      @Vlad_Gromov_1992 3 роки тому +1

      @@MobileDeveloper прям очень актуально будет. Сделай плиз, ты все такие очень очень опытный разработчик

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому

      Когда-нибудь мы до этого дойдем

  • @ЕвгенийМальцев-п9б
    @ЕвгенийМальцев-п9б 2 роки тому +1

    Алекскй ты большой молодец ! Очень помогло твоё видео . Продолжай помогать людям . Удачи тебе во всём !

  • @SanyaX2010
    @SanyaX2010 3 роки тому +3

    Спасибо за видео! Как всегда очень доступно, всё по делу и без "воды".

  • @АндрейТерегулов
    @АндрейТерегулов 3 роки тому +1

    Круто! Своевременное видео)) Как раз сейчас pet проект начинаю, хотел попробовать)

  • @AndriiDV
    @AndriiDV 3 роки тому

    Алексей спасибо за качественный контент.

  • @denislopatkin6996
    @denislopatkin6996 10 місяців тому

    Капец демо как мега проект! ))
    Сколько вы потратили времени на данное демо всего?

  • @Кенни-ш8г
    @Кенни-ш8г 3 роки тому +3

    Алексей спасибо за выпуски, планируется ли выпуск по workmanager, желательно в 2 части, вступление и в проекте)

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому

      Когда-нибудь да ) но не факт, что в ближайшее время

  • @ИльшатБиккузин
    @ИльшатБиккузин 2 роки тому

    Огромное спасибо, видео Огонь!!!!

  • @Nomad7541
    @Nomad7541 3 роки тому +6

    К сожалению jetpack navigation самое неудачное апи из jetpack. На compose они вообще сделали route навигацию по типу веба.

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому

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

    • @MrPwnzrus
      @MrPwnzrus 3 роки тому +3

      Мне кажется это супер удобным. Интеграция с bottomnavview и раздельный бекстек для вкладок из коробки , диплинки , указание до какого фрагмента делать popbackstack, аргументы без всяких newInstance и прочего. Так или иначе чтобы такое сделать пришлось бы писать свои костыли а тут уже все в либе

  • @ЕвгенийМоскаленко-у9щ

    очень круто, спасибо, скажи а что если я хочу в каком то n-ом дереве фрагмента спрятать bottomNavigationView. Я могу это провернуть в данной реализации или нужно будет выносить bottomNavigationView в SingleActivity ?

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому +1

      Да нет можно на какой угодно вложенности это делать по сути. У нас так и работает )

    • @ЕвгенийМоскаленко-у9щ
      @ЕвгенийМоскаленко-у9щ 3 роки тому +1

      @@MobileDeveloper а как мне например с FeedFragment получить доступ к bottomNavigationView в MainFragment?

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому +1

      А зачем?

    • @ЕвгенийМоскаленко-у9щ
      @ЕвгенийМоскаленко-у9щ 3 роки тому

      Вдруг понадобиться фрагмент из которого не нужно уходить нажимая на bottomNavigationView. И для это нужно же его спрятать (isVisible=false). А менеджером по управлению фрагментов(корнем) вляется MainFragment

  • @aokruan
    @aokruan 3 роки тому

    Спасибо за подробные инструкции. Теперь есть шаблон для старта. ✌

  • @Tetiana-k2w
    @Tetiana-k2w 3 роки тому

    Огромное спасибо) как раз то, что нужно

  • @pavlosoia
    @pavlosoia 3 роки тому

    Спасибо за обзор. Сейчас все поголовно используют эту навигацию, а мне она не зашла. Вот думал может я не разобрался, но после просмотра видео она всё также мне не нравится. Всё помпезно, красиво, но с тем же cicerone всё проще и удобнее.

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому +1

      Ну, такое может быть :) как говорится на вкус и цвет )

  • @PandaTop.
    @PandaTop. 3 роки тому

    Что скажите про навигацию через ViewModel? Мне вообще интересно, какую именно навигацию используют в проектах....

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому +1

      А что значит навигация через ViewModel?

  • @coffemilk652
    @coffemilk652 Рік тому

    Thanks, very useful explanation.

  • @glebdolskiy
    @glebdolskiy 3 роки тому

    27:55 Что делать с устаревшим popUpTo? Предлагает popUpToId, но ошибки разные выдаёт

  • @alexv1071
    @alexv1071 3 роки тому +2

    Тот момент, когда с первой минуты понимаешь, что контент очень годный!!! Спасибо за твой труд!

  • @ephemerayne8957
    @ephemerayne8957 3 роки тому

    Годнота :)

  • @GriNAME
    @GriNAME 3 роки тому +1

    А по компоузу будет подобное видео? Не как его интегрировать в готовом проекте, а так же с нуля, чтобы минимум лишней информации для простоты восприятия

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому

      ua-cam.com/video/cX7RVGj19iU/v-deo.html
      А это видео чем не подходит?)

  • @majorikKIK
    @majorikKIK 3 роки тому +4

    Navigation Components, как по мне, ограниченное решение для навигации, которое иногда бьет по рукам, если отклоняешься от идей библиотеки.
    Для многомодульного проекта её можно использовать, но не так, как вы описываете в видео, объясню почему:
    Рассмотрим пример приложения, в котором есть 3 экрана:
    - главный экран с товарами
    - детали товара и создатель
    - экран профиля пользователя с списком созданных им товаров
    Тогда судя по вашей логике, нужно будет сделать след. зависимости:
    - home -> detail
    - detail -> profile
    - profile -> detail
    1. Ваши фиче-модули зависят от других фиче модулей и это проблема, если на этом примере все замечательно, то в реальных приложений с этим будут проблемы, т.к. начнется hell из зависимостей между модулями, а скорость сборки увеличится.
    2. В видео опять же повторю рассматривается простой пример и если будет необходима циклическая зависимость между экранами, которые находятся в разных модулях, то с графом нужно будет костылять.
    Первой мыслью будет сделать в detail графе include profile'а, а в profile include detail'ов, в итоге словите эксепшн из-за того, что будет пытаться построится граф навигации прыгая из одного графа, в другой и обратно и так до тех пор, пока не будет переполнение стэка. (хотя возможно в последних версия что-то поменялось, но я сомневаюсь)
    3. И последний пункт, ниже кто-то писал, что эта библиотека на самом деле крутая, с чем я тоже не соглашусь. Есть явные проблемы:
    - работа с диплинками, раз уж о них упоминалось, в больших проектах и особенно модульных с ними могут быть сложности в реализации, например, когда нужно открыть экран в конкретном табе на экране, тут либо костылять, либо страдать)
    - переопределение поведения Навхоста, например, чтобы фрагменты открывались не через .replace, а через .add
    - в правильно организованных модульных проектах придется жертвовать каким-то из преимуществ этой либы, например, библиотекой safe-args (т.к. модули не будут знать ничего друг о друге, то и нет смысла в генерации destination'ов)
    - создание multi-stack навигации, в видео было сказано, что если сделать для каждой отдельный граф, то "сложность резко понизится", с чем я не согласен, скорее всего в какой-то момент просто придете к мысли, что поддержка нескольких графов становится просто болью + ко всему добавляется boilerplate код, не говоря уже о качестве) Это будет связано с тем, что скорее всего понадобится на разных вкладках делать переходы на одни и те же экраны (надеюсь понятно о чем я)
    Как по мне, библиотека хорошо подходит, если в приложении простой флоу навигации и приложение не многомодульное (речь про реальные многомодульные проекты)
    Подводя итог, для многомодульного проекта нужно понимать, что при использовании navigation components придется в любом случае чем-то жертвовать.
    Советую ознакомится с серией статей на хабре - Navigation Component-дзюцу

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому

      Спасибо большое за такой развернутый комментарий. Всегда очень нравится, когда комментарии несут пользу :)
      Теперь по существу.
      По моей логике так не будет, потому что в видео тестовый проект, в реальных условиях я буду исходить из ситуации. Конкретно в этой ситуации, естественно, учитывая связность деталки и профиля, они у меня будут просто в одном модуле вероятно лежать.
      Навигацию мы использовали в приложении на 30 модулей (это, конечно, не 200 как у некоторых), но и не 1 и не 3. И все работало прекрасно никаких проблем мы не испытывали и тем более мы не делали никаких циркулярных зависимостей. Так что у нас все норм работало я могу рекомендовать эту навигацию в том числе и для многомодульных приложений. Сейчас перешли на собственное решение, но это связанно с тем что мы ушли в мультиплатформу
      К сожалению, есть нюанс в делании видео именно в плане создания видео. Я раньше (в истории канала можно посмотреть) использовать готовые сложные проекты, которые показывали реальную ситуацию (скажем кучу модулей или еще что-то), но это приводило как раз к тому, что люди путались и ничего не понимали. Поэтому я отказался от такого и примеры да специально простые.
      Переопределение методов навхоста это действительно будет очень сложно (если не невозможно), но надо понимать, что эта библиотека она в связке с другими решениями гугла работает, поэтому безусловно они дизайном либы подталкивают к правильному с их точки зрения использованию. Кому нравится окей, кому не нравится тоже окей.
      Насчет диплинков, кстати, тоже никаких проблем не было, мы как раз всю навигацию сделали в итоге диплинковой и тоже все отлично работало ) Может мы что-то делали не так)

    • @majorikKIK
      @majorikKIK 3 роки тому +1

      ​@@MobileDeveloper Очень сомнительное решение вынести экраны профиля и товаров в один модуль, потому что звучит это как костыль, вместо решения проблемы и при этом тогда теряется смысл многомодульности.
      Посоветовал бы не привязываться к библиотеке только потому, что она от гугла. Также, реализация всей навигации в проекте с помощью диплинков опять звучит как уход от проблемы и решение "по-быстрому". К тому же, если было принято такое решение, значит реализация навигации с Navigation Components в многомодульных проектов все же имеет определенные проблемы + привязанность к библиотеке, о чем я написал выше. Хотя согласен, что это решение может работать 😀
      "они дизайном либы подталкивают к правильному с их точки зрения использованию" - нужно понимать, что не проект подстраивается под библиотеку, а наоборот и если на маленьких проектах это работает хорошо, то на больших или сложных это уже может не работать.
      Кстати, когда я говорил про модульные проекты, это не обязательно 200+ модулей, тут главное какая архитектура и то как он разбивается на модули.
      Мое мнение, что лучше рассматривать сложные примеры и кейсы (если конечно они написаны хорошо), чем "тестовые", которые наоборот еще больше могут усложнить понимание реализации и последствий.

    • @mironoff2007
      @mironoff2007 3 роки тому

      @@majorikKIK , а что лучше использовать для навигации? Я пока знакомлюсь с разработкой под андроид и пытаюсь найти инструменты, которые лучше всего подходят, чтобы не учить лишнего

    • @dmitrychernenko-2574
      @dmitrychernenko-2574 Рік тому

      @@mironoff2007 как твоя учёба? выучил андроид? как успехи ?

    • @mironoff2007
      @mironoff2007 Рік тому

      @@dmitrychernenko-2574 уже работаю полтора года

  • @АнатолийКирсанов-п1д

    Спасибо за видос

  • @МитяПомидоркин
    @МитяПомидоркин 3 роки тому

    Спасибо за контент.
    Недавно мне нужно было сделать анимацию главного меню, как у вьюпейджера(то есть при переключении от первого пункта к третьему - слайд-анимация через второй. Не придумал ничего лучше, чем использовать вьюпейджер, с тремя фрагментами, в который передавал соответствующий навграф. Получилось 4 навконтроллера, один главный (для сплеша, авторизационных экранов, экрана с главным меню и т.д.) и по одному на каждый пункт меню. Таким образом добился нужной анимации, но естественно сломалась навигация по кнопке "назад", пришлось обрабатывать самому. Если мы на фрагменте с меню, то вызывать popup() у навконтроллера текущего пункта меню, а если он не смог, то у главного навконтроллера. Кроме того некоторые переходы должны были быть на экраны без боттомнавбара, приходилось следить, чтобы использовался нужный навконтроллер. Это все конечно решалось довольно просто, буквально парой интерфейсов, но всё же нет ли способа проще?

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому +1

      Для такой кастомной штуки, врядли будет вариант попроще. Ну то есть я могу предложить вариант с анимацией внутри вью, но, имхо, это даже сложнее будет)

  • @helton57
    @helton57 3 роки тому

    Привет, крутой контент, сразу после просмотра видео понял, как работать с Jetpack Navigation, и решил затащить в проект)
    Есть вопрос - multibackstack работает лишь если я повторно нажимаю на пункт меню, но не по нажатию onBackPressed? Например, я с пункта меню "Лента" перешел на фрагмент "Detail" и потом нажимаю на пункт меню "Настройки". И дальше, если я нажму на пункт меню Лента, то все ок - я увижу фрагмент "Detail", но если я вместо этого нажму назад, то попаду на пустой пункт меню "Лента"... как сделать так, чтобы "Detail" отображался в обоих случаях?

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому

      По идее навигация из коробки умеет работать с backpressed. Тут надо логгировать, смотреть код, так я не понимаю в чем у вас проблема

  • @masli1337
    @masli1337 3 роки тому

    как сделать build gradle в kts файле?

  • @denislopatkin6996
    @denislopatkin6996 10 місяців тому

    Автору огромное спасибо!
    Тем не менее по итогу получается что если стоит боковое меню или нижнее меню, то управление бекстеком происходит коряво. То есть бекстек при переходе создается полностью, а очистка только при нажатии кнопок назад. Такая ситуация очень грусная… и если я при переходе хочу в начале очистить стек и только потом перейти, то такой опции видимо вообще не предусмотрено…

  • @luen6019
    @luen6019 3 роки тому

    Есть ли разница в jetpack compose и compose for desktop

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому

      По большому счету нет разницы

  • @dmitryobukhov6681
    @dmitryobukhov6681 3 роки тому

    Спасибо, крутое видео, то есть теперь мы можем использовать navigation вместо intent?

  • @NikolyOrl
    @NikolyOrl Рік тому

    Не указанно возможность safeArg

  • @НиколайМокляк
    @НиколайМокляк 2 роки тому

    multibackstack с нижнем меню, работает как то криво, или чего не понимаю. Есть 5 пунктов меню, когда идёт переход между начальные фрагментами в меню, все нормально. Но если зайти в дальше по фрагменту, например в пункте меню C, потом перейти в A. А после нажать на пункт меню C. То фрагмент будет то же, что и должен быть, но пункт меню активные показывает A.

  • @viacheslav4576
    @viacheslav4576 3 роки тому

    Дякую за якісний контент. Дуже багато корисної інформації отримав з твоїх відео. Чекаю з нетерпінням нових відео. Бажано для новачків))

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому

      Не очень понял, что написано, но спасибо )

  • @СергейПанов-з3ц
    @СергейПанов-з3ц 3 роки тому

    Что там про продолжение серии видео про сборщики мусора?

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому +1

      Монтируется) я стараюсь снять видео сейчас, чтоб побольше успеть смонтировать за сентябрь ) потом сяду монтировать это видео )

  • @edm-ko2017
    @edm-ko2017 3 роки тому

    Спасибо за видео. Было бы интересно узнать про более сложную навигацию. Например как открыть по диплинку фрагмент внутри графа с bottom navigation если есть тот же логин.

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому

      Интересный кейс, но он уже больше к диплинкам относится, нежели к навигации

    • @kanatbekov_24
      @kanatbekov_24 3 роки тому

      @@MobileDeveloper есть ли у вас хорошие ссылки на habr, medium про диплинкам.

  • @Ashimoro
    @Ashimoro 3 роки тому

    Спасибо!
    А как открыть деталку без нижней навигации?

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому

      В примере на гитхабе есть как раз такая реализация)

  • @rnsization
    @rnsization 3 роки тому

    Выглядит красиво, но на практике оказалось увы, что не везде подходит. Особенно если многомодульный проект где доступ к модулям через интерфейс feature api и модулем может быть как один экран, так и отдельный flow.

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому

      Можно внутри модуля делать навигацию через jetpack все равно будет удобно. А переходить можно через реализацию интерфейса того же типа launch или navigate

    • @rnsization
      @rnsization 3 роки тому

      @@MobileDeveloper согласен, но когда получаются фичи, как отдельные переиспользуемые экраны, тут уже не так гладко, а использовать кучу диплинков уже не так красиво, как хотелось бы.

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому +1

      Вот кстати, я сейчас сделал всю навигацию между модулями через дип линки. Пока полёт нормальный, плюс есть возможность из вебвью модулей обращаться к внутренним модулям

  • @diptan83
    @diptan83 3 роки тому

    Спасибо за очень качественный контент.

  • @tequilaonelove
    @tequilaonelove 3 роки тому

    оставил коммент, но его нету почему-то )) , а еще нифига не понятно, если выпуск от 8 сентября, каким образом здесь комменты есть, которые неделю назад оставили)

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому +1

      Я видел коммент, но некоторые комменты сразу же удаляет ютуб. Причём именно удаляет, а не на модерацию отравляет. Возможно из-за ссылок
      Насчёт комментов это потому что видео вначале выходит для спонсоров и там оно может лежать довольно долго ) например сейчас есть два видео, которые доступны на бусти (не считая тех что является эксклюзивом)

    • @tequilaonelove
      @tequilaonelove 3 роки тому

      ​@@MobileDeveloper Понятно тогда теперь всё. А то сначала подумал что комментарий и вовсе не отправился. Плохо что нет на ютубе такой опции, посмотреть, что за комменты оставлялись, да и вообще активность пользовательскую расширенную, а не только просмотренные ролики.. =)

    • @tequilaonelove
      @tequilaonelove 3 роки тому

      Тогда еще такой вопрос небольшой., связанный с навигацией. Использовав ту библиотеку, о которой я писал в заболоченном комментарии была такая проблема, что при переходе по вкладкам в навигации (bottomNavigationView) был какой то неприятный фриз., когда происходит attach/detach фрагментов.. Единственным выходом из ситуации была костыльная проверка, с помощью которой проверялось, если в стеке сейчас лежит главный фрагмент только, то выполнялся "fragmentManager.beginTransaction().hide()" вместо ".detach()". Задержки при переключении между вкладками/стеками происходят из за того что фрагмент "тяжёлый" или как ?

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому

      Ну просто на это ж время нужно, там ещё поди весь код инициализировался в onCreateView

  • @p.polunin
    @p.polunin 10 місяців тому

    Материал очень полезный, но для кого автор рассказывает, непонятно, видимо для себя любимого. Посыл рваный, несвязный, даже с пересмостром уловить трудно, ну, главное, чтобы ему самому было понятно.

  • @DmitryKatsubo
    @DmitryKatsubo 3 роки тому

    жестяная жесть, конечно, кто в iOS это все делал - посмотрели и вышли нервно покурить, говорить что после такого разработчики какие-то там молодцы язык не поворачивается

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому

      От iOS есть много отличий. Во-первых там сториборды это сразу же и верстка, а здесь верстка в отдельном компоненте находится + куча интеграций с диплинками и прочими историями из коробки.

    • @DmitryKatsubo
      @DmitryKatsubo 3 роки тому

      @@MobileDeveloper у меня после просмотра появился вопрос, если при переходе между фрагментами предыдущий фрагмент персоздается заново, как поддерживать нужный мне стек фрагментов (например процесс регистрации) в каком-то стабильном состоянии? При возврате на шаг назад хотелось бы видеть к примеру что форма заполнена данными

    • @MobileDeveloper
      @MobileDeveloper  3 роки тому

      Это можно делать в связке с ViewModel, я потом отдельно про это видео сниму, но в рамках видео про Compose. Но в старой верстке точно также будет работать. К слову сам фрагмент не уничтожается, уничтожается только view, так что теоретически ты можешь просто эти данные в поле сложить в классе, а в onCreateView заполнить этими данными и должно работать)

  • @d.mertsalov
    @d.mertsalov 3 роки тому

    Спасибо!

  • @AlexS32-i2l
    @AlexS32-i2l 2 роки тому +1

    Спасибо!

  • @yaroslav_kior
    @yaroslav_kior Рік тому

    Спасибо!