view.md

May 26, 2020 · View on GitHub

Главная

Ридми модуля

View

Слой View является максимально пассивным и выполняет 2 задачи:

  • Показывает информацию пользователю;
  • Передает пользовательские события в Presenter.

Под View подразумевается не только android.View, но и Activity, Fragment, Dialog или Widget.

Для создания View экрана следует наследоваться от одного из классов:

аналогично для FragmentView.

см типы базовых классов вью

Взаимодействие частей View (например Adapter, кастомная android.View) напрямую с презентером запрещено. Только View может взаимодействовать с презентером.

Если экран не содержит логики, то следует наследоваться от CoreActivityView или CoreFragmentView.

Api вью может иметь только методы вида void someMethod(params...), это нужно для соответствия принципу Unidirectional data flow.

Базовые классы и интерфейсы вью
Классы Activity

Классы указаны в порядке наследования.

Этот базовый класс можно не использовать, если с большой гарантией можно предвидеть, что пользователю не потребуется обновлять контент.

Классы Fragment

Для фрагментов предусмотрены аналогичные базовые классы.

Замечание: при создании экрана:

  • #getScreenName() - имя экрана для логирования(не использовать имя класса через рефлексию из-за обфускации)
Кастомные вью

Лучшие практики по созданию кастомных виджетов - здесь.

Интерфейсы

  • CoreView - базовый интерфейс для всех кастомных вью

  • PresenterHolderCoreView - может быть использован для кастомных android.View c поддержкой презентера.

  • RenderableView - для кастомных вью с поддержкой отрисовки модели экрана

Также есть возможность использовать презентеры в кастомных android.View, для существует два способа:

  1. заинжектить этот презентер в базовую вью (Activity или Fragment, реализующие интерфейс PresenterHolderCoreView) и переопределить метод bindPresenters, в котором связать кастомную android.View с презентером (вызвать у презентера метод attachView()).

  2. использовать виджеты - кастомные вью с презентером, которые создаются аналогично экрану.