как грамотно увязать Navigation Component, ViewPager2 и стандартное меню Android? Задача такова: нужно сделать опциональный переход по свайпу между несколькими фрагментами, при этом оставить возможность перехода без анимации при помощи нажатия на иконки в меню
А как мне, в таком случае, реализовать переход по свайпу? Или мне из-за этого придётся выбросить навкомпонент?
Не до конца понимаю твой кейс, но что конкретно не так? VP лежит в фрагменте который является частью графа, фрагменты внутри VP уже вне графа, их можно листать по желанию. Если нужно открыть фрагмент с VP сразу на определенной странице, можно передать её через аргумент
Мой кейс простой как два пальца — есть MyActivity, в котором находятся FragmentContainerView и ToolBar, и несколько фрагментов - Fragment A, B, C. У MyActivity так же присутствует меню и некоторые его айтемы, например, отвечающие за переход к Fragment A, постоянно показываются в виде иконок, поэтому каждому айтему с иконкой соответствует свой фрагмент (Fragment A, B, C). Соотвественно, чтобы перейти из Fragment A => Fragment C тебе нужно просто нажать на соответствующий айтем с иконкой. Что я хочу сделать? Я хочу просто прикрутить возможность пролистывания (желательно с красивой анимацией) чтобы ты, будучи в Fragment A, мог с помощью свайпа перейти в Fragment B, а затем в Fragment C.
Но мне в таком случае придётся выкидывать навкомпонент
Понял, ну ты хочешь в обход навкомпонента поменять его стек, я если честно хз есть ли в нем удобный метод для такого, скорее всего нет
Вообще изначально странный юзкейс, но допустим. Навкомпонент выкидывать не надо. Будет у вас стартДестинейшн фрагмент, который в себе только вьюпейджер и держит, через фрагментрезалтЛистенер от активити будет получать номер фрагмента для проскролливания, а вся навигация будет идти не от каждого отдельного фрагмента, а от хостящего этот вьюпейджер
Тогда с чего начать чтобы создать такой ужасный прекрасный велисопед?
Так и зачем ему тогда навкомпонент в такой схеме, если он не используется
Ну увы и ах, мой проект это вообще целиком и полностью нетипичный юзкейс. Так, то есть вы предлагаете добавить фрагмент для того чтобы туда всунуть ViewPager2? То есть будет что-то вроде этого: MyActivity => Fragment VP, а когда пользователь захочет нажать на иконку айтема меню Fragment B, то мы смело подменяем Fragment VP Fragment B?
Активити отправляет резалт для показа нужного фрагмента по индексу или любому другому идентификатору, а фрагмент с ВьюПейджером эти резалты ловит и обрабатывает
Всё равно немного не понимаю как вы себе это представляете. Да и куда мне в таком кейсе деть навкомпонент, опять же? Ладно, лучше попробую поискать какие-нибудь либы и конкретно их проковырять. Вроде помню одну такую, которая предлагала что-то похожее
А может убрать вью пейджер и вручную как то добавить свайпы, которые будут дергать нав контроллер...
Фрагмента контейнер содержит в себе навигацию: 1) ViewPagerFragment (Start destination) n) Любой другой n-ый фрагмент Навигация происходит между этими экранами и даже если фрагмент С должен куда то вести, это все равно будет происходить из ViewPagerFragment'а
Ты про то, что это будет навигация вложенная типо?
Можно прицепить этот как его... OnGestureListener, что, возможно, проще, но там не будет анимации =)
Почему не будет? Обрабатываешь свайп и дергаешь из навкомпонента переход. Анимация там привязана
Хм... А он теперь адекватно обрабатывает свайпы? Просто я раньше, вроде как, использовал OnGestureListener, но блин, со свайпами там вообще страшно было
Да не было там ничего страшного. Просто down и up событие с определённой дистанцией и скоростью.
OnSwipeTouchListener
Обсуждают сегодня