Size: a a a

Cicerone Chat (RUS)

2020 October 14

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
Aleksei B.
Касательно описанного выше кейса, на мой взгляд ничего критичного не случится. В 99% случаев разработчик это заметит и закроет экран вручную. В 1% случаев описанное поведение возможно будет использоваться намерено.
Надо решить оставить такое поведение, либо всегда при отправке результата назад закрывать текущий экран. Возможно второй вариант будет у всех и всегда, потому что вряд ли нужно скрыто отправлять результаты.
вот это мне меньше нравится - всегда закрывать экран. так как там может быть много кейсов:
- закрытие
- реплейс
- закрытие цепочки
- замена цепочек
источник

AB

Aleksei B. in Cicerone Chat (RUS)
Alexey Pushkarev
А что не так с аля Гугл?
те же фрагменты
сколько они уже существуют?
для них до сих пор не выкатили в релиз нормальную передачу результатов
гугл выкатывает фичу для разработчиков, а потом делает кучу костылей
касательно фрагментов это Navigation, FragmentFactory, Fragment Result API
и самое смешное, что даже костыли с трещинами и не без проблем
источник

ПК

Павел Калинин... in Cicerone Chat (RUS)
Можно написать свои фрагменты, как это сделали в telegram
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
я прошу еще раз
источник

AB

Aleksei B. in Cicerone Chat (RUS)
Konstantin Tskhovrebov
вот это мне меньше нравится - всегда закрывать экран. так как там может быть много кейсов:
- закрытие
- реплейс
- закрытие цепочки
- замена цепочек
кстати да
непонятно закрывать только один последний экран или все цепочку, поэтому остается только один вариант -> оставить на откуп разработчикам
источник

AB

Aleksei B. in Cicerone Chat (RUS)
или еще как вариант, сделать возможность вернуть результат, только во время закрытия одного экрана или всей цепочки
источник

AB

Aleksei B. in Cicerone Chat (RUS)
И я же правильно понимаю, что результат будет возвращаться только в тот фрагмент, который открыл текущий?
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
при закрытии цепочки может закрыться и слушатель, поэтому так или иначе там за все отвечает разработчик
источник

ЕК

Евгений Кузовкин... in Cicerone Chat (RUS)
Что думаете по поводу того, чтобы сделать это отдельным подключаемым модулем? Усилия не стоят профита?
источник

ЕК

Евгений Кузовкин... in Cicerone Chat (RUS)
В моём представлении либе это будет на пользу. Думаю, что большинство пользователей Cicerone используют MVP, и так или иначе либо мучаются, доставляя результат в презентер из фрагментов, либо пишут свои самописные решения, которые сводятся к чему-то одному
источник

AC

Arsen CeH9 in Cicerone Chat (RUS)
Konstantin Tskhovrebov
Могу так же сделать, как вам?
Только интересно, что будет если я отправлю результат, но не закрою экран, а тот кто слушает результат, откроет сверху еще экран...
Кто пробовал?
Или подобное поведение остается на откуп разработчикам?
This result will be delivered to a FragmentResultListener that is called given to setFragmentResultListener with the same requestKey. If no FragmentResultListener with the same key is set or the Lifecycle associated with the listener is not at least androidx.lifecycle.Lifecycle.State.STARTED, the result is stored until one becomes available, or clearFragmentResult is called with the same requestKey.


Если слушатель открывает экран через add то сработает сразу, а если через replace, то отложиться на потом (когда фрагмент(слушатель) вернется в State.STARTED)
источник

AC

Arsen CeH9 in Cicerone Chat (RUS)
так то можно и свою реализацию Lifecycle написать, которая будет заходить в State.STARTED в нужный момент
источник

AC

Arsen CeH9 in Cicerone Chat (RUS)
про это даже в доках есть
You can also implement LifecycleOwner in your own classes.
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
не понял этого.
источник

AC

Arsen CeH9 in Cicerone Chat (RUS)
что касается гуглового резалт апи, то там просто map во фрагментМенеджере
String, Bundle

где менеджмент ключами полностью на разработчике (константами фигачим), а сам фрагментМенеджер только:

1)  сохраняет/восстанавливает резалты (бандлы)  после смерти процесса.
2) обсервит лайфсайклОвнеров и раздает резалты, когда слушатели в подходящих стейтах

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

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
Евгений Кузовкин
Что думаете по поводу того, чтобы сделать это отдельным подключаемым модулем? Усилия не стоят профита?
не думаю, что надо отдельный модуль, так как библиотека итак маленькая.
отдельный модуль полезен для больших кусков, либо когда можно выбирать среди разных модулей
источник

AC

Arsen CeH9 in Cicerone Chat (RUS)
Konstantin Tskhovrebov
не понял этого.
честно говоря, я тоже не совсем понял твой кейс, как овнер слушателя откроет "еще один экран", если перед юзером открыт другой, который как ты говоришь специалньо не закрыли. Есть пример бизнесового юзкейса?
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
без понятия про бизнес кейс.
так можно сделать. а раз так, то кто-то так сделает
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
но теперь я вижу, что это ок
источник

AC

Arsen CeH9 in Cicerone Chat (RUS)
а что именно ты не понял?
источник