Size: a a a

Android Architecture

2017 January 26

MT

Max Tuev in Android Architecture
Michael Yeryomenko
Привет всем! А как вы считаете, должны ли пресентеры переживать повороты экрана? И если да, то как решаете эту проблему?
Сохранять презентер можно с помощью дополнительного фрагмента без Вью с setRetainInstance(true). Рабочую версию можно накатать на коленке за час. Пример реализации можно глянуть в Ferro MVP
источник

MY

Michael Yeryomenko in Android Architecture
Max Tuev
Сохранять презентер можно с помощью дополнительного фрагмента без Вью с setRetainInstance(true). Рабочую версию можно накатать на коленке за час. Пример реализации можно глянуть в Ferro MVP
А работает ли данный подход с вложенными фрагментами? Например есть фрагмент в котором есть вьюпейджер с несколькими фрагментами. Насколько я помню, данный подход не сработает. Или я не прав?
источник

D

Dmitriy in Android Architecture
Максим Кулешов
Вот это мне тоже не совсем понятно.
Как тестить нулевую вьюшку, то есть по сути мы тестим поведение презентера, если у него будет нулевая вьюшка?
А аннотации типа setView(@NonNull View v) нам никак  не помогают?
Мы все равно можем передать туда null?
1. Проверить можно verifyZeroInteractors(mView)
2. Аннотации можно проигнорить/не заметить
источник

А

Андрей in Android Architecture
Michael Yeryomenko
А работает ли данный подход с вложенными фрагментами? Например есть фрагмент в котором есть вьюпейджер с несколькими фрагментами. Насколько я помню, данный подход не сработает. Или я не прав?
так ретейн фрагмент один, и лежит внутри активити. и доступ к его данным делается через активити. у вложенного фрагмента метод getActivity должен возвращать ту же активити, что и для родительского. так почему этот способ не должен работать?
источник

EM

Eugene Matsyuk in Android Architecture
Максим Кулешов
Вот это мне тоже не совсем понятно.
Как тестить нулевую вьюшку, то есть по сути мы тестим поведение презентера, если у него будет нулевая вьюшка?
А аннотации типа setView(@NonNull View v) нам никак  не помогают?
Мы все равно можем передать туда null?
Про нулевую вьюшку я имел в виду, если она возможна по твоей архитектуре.
Если @NotNull - то не надо, конечно же
источник

MT

Max Tuev in Android Architecture
Андрей
так ретейн фрагмент один, и лежит внутри активити. и доступ к его данным делается через активити. у вложенного фрагмента метод getActivity должен возвращать ту же активити, что и для родительского. так почему этот способ не должен работать?
Верно
источник

MT

Max Tuev in Android Architecture
Кстати в Ferro еще описано как удобно работать с rx вместе с переживающим смену конфигурации презентером
источник

MY

Michael Yeryomenko in Android Architecture
Max Tuev
Кстати в Ferro еще описано как удобно работать с rx вместе с переживающим смену конфигурации презентером
Хорошо. Я посмотрю обязательно. А чем решение с ретейн фрагментами лучше допустим некого статического хранилища пресентеров? Например в application классе
источник

MT

Max Tuev in Android Architecture
Удобно отслеживать полное уничтожение экрана, плюс открываются новые возможности так как можно использовать ActivityProvider в объектах даггер скоупа экрана, к примеру для осуществления навигации
источник

I

Ivan in Android Architecture
Максим Кулешов
Вот это мне тоже не совсем понятно.
Как тестить нулевую вьюшку, то есть по сути мы тестим поведение презентера, если у него будет нулевая вьюшка?
А аннотации типа setView(@NonNull View v) нам никак  не помогают?
Мы все равно можем передать туда null?
Использовать котлин)
источник

EM

Eugene Matsyuk in Android Architecture
Michael Yeryomenko
Привет всем! А как вы считаете, должны ли пресентеры переживать повороты экрана? И если да, то как решаете эту проблему?
Должны. Это удобнее в конце концов.
Через Даггер 2 это решается довольно просто. Достаточно держать в глобале ссылку на компонент, содержащий Презентер (ну и за одно всю цепочку с Интерактором, Репозиторием и другими необходимыми классами).
источник

А

Андрей in Android Architecture
Max Tuev
Кстати в Ferro еще описано как удобно работать с rx вместе с переживающим смену конфигурации презентером
Посмотрел семплы. Я правильно понял, что взаимодействие с вьюшкой через фриз-менеджер возможен только в Rx варианте? В простом я сам при каждом обращении к вьюшке должен проверять ее наличие? И не слишком ли сложный жизненный цикл у презентера? У Дорфмана, кажется, была хорошая статья, где он объяснял почему презентер не должен повторять жизненный цикл активити/фрагмента.
источник

EM

Eugene Matsyuk in Android Architecture
Нам и так тяжело с ЖЦ активити и фрагмента, а тут еще ЖЦ презентера =(
источник

I

Ivan in Android Architecture
Презентер же живет чуть дольше вьюхи, зачем ему свой жц
источник

AP

Alexey Pushkarev in Android Architecture
Eugene Matsyuk
Нам и так тяжело с ЖЦ активити и фрагмента, а тут еще ЖЦ презентера =(
как вы отностесь к moxy ? на мой взгляд неплохое решение
источник

MY

Michael Yeryomenko in Android Architecture
Eugene Matsyuk
Должны. Это удобнее в конце концов.
Через Даггер 2 это решается довольно просто. Достаточно держать в глобале ссылку на компонент, содержащий Презентер (ну и за одно всю цепочку с Интерактором, Репозиторием и другими необходимыми классами).
Именно так сейчас и делаю. Но интересно какие ещё решения у людей есть.
источник

MY

Michael Yeryomenko in Android Architecture
Max Tuev
Удобно отслеживать полное уничтожение экрана, плюс открываются новые возможности так как можно использовать ActivityProvider в объектах даггер скоупа экрана, к примеру для осуществления навигации
Не понял какого именно экрана. Активити целого?
источник

EM

Eugene Matsyuk in Android Architecture
Alexey Pushkarev
как вы отностесь к moxy ? на мой взгляд неплохое решение
Стыдно признаться, все руки до него не доходят( Но обязательно поиспытываю его.
Если что, тут есть авторы мокси @senneco @xanderblinov
источник

А

Андрей in Android Architecture
я еще у Мокси есть свой канал https://t.me/moxy_ru
источник

MT

Max Tuev in Android Architecture
Андрей
Посмотрел семплы. Я правильно понял, что взаимодействие с вьюшкой через фриз-менеджер возможен только в Rx варианте? В простом я сам при каждом обращении к вьюшке должен проверять ее наличие? И не слишком ли сложный жизненный цикл у презентера? У Дорфмана, кажется, была хорошая статья, где он объяснял почему презентер не должен повторять жизненный цикл активити/фрагмента.
Да, без фриза придется прийдется проверять Вью на null. Насчет жизненного цикла, это кому как удобнее. В большинстве случаев при имплементации экранов эти методы кроме onLoad не нужны. Удобно когда например потребуется обновление данных на onResume, сразу писать логику в презентере. К тому же метод onViewDetached необходим для отписки от Observables Вью. У нас  проблем с жизненным циклом презентера не было, так как все разрабы и так наизусть знают жизненный цикл экрана.
источник