Всем привет, я создаю андроид приложение с архитектурой MVP. У меня есть Activity и у нее есть Presenter. Activity так же имеет Fragment и у Fragment тоже есть Presenter (буду называть Activity.Presenter и Fragment.Presenter во избежание путаницы). Задача состоит в следующем: передать из Activity или Activity.Presenter в Fragment.Presenter ссылку на Activity.Presenter. Однако, я не могу внутри Fragment пользоваться таким механизмм как getActivity(), так как Fragment не должен знать об Activity(воизбежании жестких зависимостей) а так же не могу делать Activity.Presenter Singleton'ом . Подскажите, пожалуйста, можно ли это как-то реализовать, я не против использовать dagger ну или что-то более простое. Заранее спасибо.
На мой взгляд, неплохой способ организации MVP во взаимодействии activity->fragment - это создавать в Activity.Presenter Fragment.Presenter. Почему я считаю это корректно?
Во-первых, фрагмент порожден активити, является его частью => это вполне логично, что логика активити знает про фрагмент. Т.о. активити может управлять фрагментом, а фрагмент при необходимости может достучаться до Activity.Presenter через интерфейс с набором необходимых функций
Во-вторых, (из практических соображений, с чем я столкнулся) однажды придется позаботиться о сохранении состояния фрагмента и активити при повороте экрана. Т.к. обычно в приложении есть какая-то навигация, то получается с т.з. Fragment.Presenter переход на другой фрагмент и поворот экрана - одно и то же (отсоединение от MVP.view). Но с точки зрения андроида - это, естественно разные вещи, т.е. при переключении фрагментов onSaveInstanceState не вызывается (из логики, что пользователь может никогда не вернутся в этот фрагмент). Получится, что просто некуда сохранять состояние (и даже если получится что-то сделать в други функциях, то потом придется бороться со сворачиванием приложения и последующим разворачиванием)
Решение: аргрегировать Fragment.Presenter в Activity.Presenter. Таким образом жизненный цикл Fragment.Presenter привязан к жизненному циклу активити. Из такой конструкции появляется важный момент: единственное, что надо сделать при повороте экрана - активити в onSaveInstanceState вытаскивает из Activity.Presenter состояние своего презентера и всех дочерних. А в onCreate это состояние можно восстановить
Благодаря такой конструкции уменьшится количество кода и странных костылей
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости