view.md
May 26, 2020 · View on GitHub
View
Слой View является максимально пассивным и выполняет 2 задачи:
- Показывает информацию пользователю;
- Передает пользовательские события в Presenter.
Под View подразумевается не только android.View, но и Activity, Fragment, Dialog или Widget.
Для создания View экрана следует наследоваться от одного из классов:
-
BaseRenderableActivityView- поддерживает отрисовку и обработку ошибок из презентера -
BaseLdsActivityView- поддерживает состояния загрузки данных на экране -
BaseLdsSwrActivityView- поддерживает состояние обновления экрана
аналогично для FragmentView.
Взаимодействие частей View (например Adapter, кастомная android.View) напрямую с презентером запрещено. Только View может взаимодействовать с презентером.
Если экран не содержит логики, то следует наследоваться от CoreActivityView
или CoreFragmentView.
Api вью может иметь только методы вида void someMethod(params...),
это нужно для соответствия принципу Unidirectional data flow.
Базовые классы и интерфейсы вью
Классы Activity
Классы указаны в порядке наследования.
-
CoreActivityView- Класс с корневой логикой вью -
BaseRenderableActivityView- базовый класс для ActivityView, поддерживающий отрисовку ScreenModel и обработку ошибок -
BaseLdsActivityView- базовый класс ActivityView c поддержкой состояния загрузкиLoadStateИспользуется вместе с PlaceHolderView. -
BaseLdsSwrActivityView- базовый класс ActivityView c поддержкой:-
состояния загрузки
LoadState -
состояния SwipeRefresh
SwipeRefreshState
-
Этот базовый класс можно не использовать, если с большой гарантией можно предвидеть, что пользователю не потребуется обновлять контент.
Классы Fragment
Для фрагментов предусмотрены аналогичные базовые классы.
Замечание: при создании экрана:
#getScreenName()- имя экрана для логирования(не использовать имя класса через рефлексию из-за обфускации)
Кастомные вью
Лучшие практики по созданию кастомных виджетов - здесь.
Интерфейсы
-
CoreView- базовый интерфейс для всех кастомных вью -
PresenterHolderCoreView- может быть использован для кастомных android.View c поддержкой презентера. -
RenderableView- для кастомных вью с поддержкой отрисовки модели экрана
Также есть возможность использовать презентеры в кастомных android.View, для существует два способа:
-
заинжектить этот презентер в базовую вью (Activity или Fragment, реализующие интерфейс
PresenterHolderCoreView) и переопределить методbindPresenters, в котором связать кастомную android.View с презентером (вызвать у презентера методattachView()). -
использовать виджеты - кастомные вью с презентером, которые создаются аналогично экрану.