Всем привет, я создаю андроид приложение с архитектурой 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 это состояние можно восстановить
Благодаря такой конструкции уменьшится количество кода и странных костылей
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
исключает ли использование synchronized, volatile?
Пишу авторизацию пользователей в моем Web приложении на JSF, возникла проблема в том, что когда мы используем теги h:inputText & h:inputSecret, а потом...
Если я пишу длинный запрос на сервер, к примеру 5000 байтов, то приходит только 1024, а потом приходит остальная часть
Использую apache ftp client, но проблема в том, что на FTP файлы с разными кодировкамиВот вывод консоли, если я ставлю UTF-8: