Size: a a a

Cicerone Chat (RUS)

2020 June 30

AD

Aleksey D. in Cicerone Chat (RUS)
Anton Pankratov
Тут еще такое:
Я прописал в MainActivity метод onBackPressed таким образом -

if (currentFragment is BaseFragment)
    (currentFragment as? BaseFragment)?.onBackPressed()

Когда я нажму на такую кнопку, то по возвращению на прерыдущий экран будут ли мне виден текст, который пользователь вводил ранее? Типа onSavedState
я бы предложил смотреть в сторону https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher
источник

AP

Anton Pankratov in Cicerone Chat (RUS)
А библиотека не имеет каких-нибудь фич для onBackPressed?
источник

AD

Aleksey D. in Cicerone Chat (RUS)
Anton Pankratov
А библиотека не имеет каких-нибудь фич для onBackPressed?
имеет, router.exit()
источник

AP

Anton Pankratov in Cicerone Chat (RUS)
@snoozerio Благодарю за ответы
источник
2020 July 02

L

LGFox in Cicerone Chat (RUS)
Добрый вечер! Пара вопросов:
1. Как мне быть, если мне нужно выйти на два уровня вверх и потом на новый экран? И мне нужно осуществить этот переход из одного места. Будет работать, если последовательно вызвать у роутера exit(), exit(), navigateTo(...)?
2. Планируется в будущем перейти на использование URL? Например вот таких:
- router.navigateTo("../../ProfileScreen")
- router.navigateTo("ProfileScreen")
- router.navigateTo("/RootScreen/MoreScreen/ProfileScreen")
источник

L

Little Panda 🐼 in Cicerone Chat (RUS)
LGFox
Добрый вечер! Пара вопросов:
1. Как мне быть, если мне нужно выйти на два уровня вверх и потом на новый экран? И мне нужно осуществить этот переход из одного места. Будет работать, если последовательно вызвать у роутера exit(), exit(), navigateTo(...)?
2. Планируется в будущем перейти на использование URL? Например вот таких:
- router.navigateTo("../../ProfileScreen")
- router.navigateTo("ProfileScreen")
- router.navigateTo("/RootScreen/MoreScreen/ProfileScreen")
1. backTo(screen) и navigateTo(screen2)
2. Зачем это нужно? Какой профит от этого?
источник

L

LGFox in Cicerone Chat (RUS)
1. Ну во-первых, допустим я не знаю какие там наверху экраны. Я просто хочу выйти на два уровня вверх. Во-вторых, значит я могу последовательно дергать методы у роутера и все будет нормально?
2. Так эстетичнее и понятнее, легче поддерживать DeepLink. А еще можно параметры передавать: navigateTo("../../ProfileScreen?username=John&vip_customer=1")
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
LGFox
1. Ну во-первых, допустим я не знаю какие там наверху экраны. Я просто хочу выйти на два уровня вверх. Во-вторых, значит я могу последовательно дергать методы у роутера и все будет нормально?
2. Так эстетичнее и понятнее, легче поддерживать DeepLink. А еще можно параметры передавать: navigateTo("../../ProfileScreen?username=John&vip_customer=1")
Раз вы четко знаете, что надо именно два  значит уже что-то не так.
И нет, нормально не будет.
Вам надо наследовать роутер и добавить нужный метод: наДваЭкранаНазадИВперед(новый_экран) который построит внутри банч команд
источник

L

LGFox in Cicerone Chat (RUS)
Konstantin Tskhovrebov
Раз вы четко знаете, что надо именно два  значит уже что-то не так.
И нет, нормально не будет.
Вам надо наследовать роутер и добавить нужный метод: наДваЭкранаНазадИВперед(новый_экран) который построит внутри банч команд
Спасибо!
источник
2020 July 07

P▽

Picty ▽ in Cicerone Chat (RUS)
Ребята, подскажите пожалуйста — использую Cicerone 5.1.0 + Moxy
ловлю deeplink в MainActvity — далее роутер открывает MainFragment передает туда параметр, в нём в onViewCreated инициализируется viewPager2:
adapter = MainStateAdapter(childFragmentManager, lifecycle)
//пробовал передавать внутрь просто фрагмент — ошибка такая же

и тут же прокидывается в презентер данный параметр.

далее в презентере в onFirstViewAttach пытаюсь перейти на фрагмент:
router.navigateTo(Screens.MyScreenData(id = id)) 

и получаю:
java.lang.RuntimeException: Unable to resume activity {app.dev/activities.main.MainActivity}: java.lang.IllegalStateException: FragmentManager is already executing transactions

Что делаю не так?

*подозреваю, что т.к. происходит инициализация MainFragment + ViewPager работает с  FragmentManager  — то типа он "занят"

Да
, postDelayed спасает — но как обойтись без этих костылей?
источник

L

Little Panda 🐼 in Cicerone Chat (RUS)
Picty ▽
Ребята, подскажите пожалуйста — использую Cicerone 5.1.0 + Moxy
ловлю deeplink в MainActvity — далее роутер открывает MainFragment передает туда параметр, в нём в onViewCreated инициализируется viewPager2:
adapter = MainStateAdapter(childFragmentManager, lifecycle)
//пробовал передавать внутрь просто фрагмент — ошибка такая же

и тут же прокидывается в презентер данный параметр.

далее в презентере в onFirstViewAttach пытаюсь перейти на фрагмент:
router.navigateTo(Screens.MyScreenData(id = id)) 

и получаю:
java.lang.RuntimeException: Unable to resume activity {app.dev/activities.main.MainActivity}: java.lang.IllegalStateException: FragmentManager is already executing transactions

Что делаю не так?

*подозреваю, что т.к. происходит инициализация MainFragment + ViewPager работает с  FragmentManager  — то типа он "занят"

Да
, postDelayed спасает — но как обойтись без этих костылей?
Можете прочитать наш тред. Начало тут https://t.me/Cicerone_RUS/7937
источник

P▽

Picty ▽ in Cicerone Chat (RUS)
Спасибо!
источник
2020 July 15

AC

Arsen CeH9 in Cicerone Chat (RUS)
Переслано от Arsen CeH9
сейвово ли выполнять транзакции фрагментменеджера после onStart активити? cicirone расчехляется(рекомендует) только после onResume/onResumeFragments.  По идее только после сохранения стейта нельзя, а при создании можно хоть в онкриейте. Крч, поясните в чем соль
источник

AC

Arsen CeH9 in Cicerone Chat (RUS)
Переслано от Arsen CeH9
Фрагмент менеджер восстанавливается в onCreate
источник

AC

Arsen CeH9 in Cicerone Chat (RUS)
Переслано от Arsen CeH9
та же лайвдата "просыпается" после onStart, и в условном "singleLiveEvent" уже можно шаманить с навигацией
источник
2020 July 16

AC

Arsen CeH9 in Cicerone Chat (RUS)
Konstantin Tskhovrebov
в новой версии вот так выглядит описание экранов
возможно я что-то напутал, но у меня дефолтный screenKey всегда отдает
источник

AC

Arsen CeH9 in Cicerone Chat (RUS)
com.github.terrakok.cicerone.androidx.FragmentScreen
источник

AC

Arsen CeH9 in Cicerone Chat (RUS)
хотя все логично, ведь инстанциируем FragmentScreen
источник

AC

Arsen CeH9 in Cicerone Chat (RUS)
но задумывалось скорее всего не это)
источник

AC

Arsen CeH9 in Cicerone Chat (RUS)
как вариант - сделать создание ключа явным
источник