действие , которое передается к Presenter'u 2. Presenter отправляет команду к ViewState 3. ViewState добавляет команду в очередь команд, и затем передает ее к View
в команде 5. Presenter стартует асинхронный запрос к Model 6. Presenter принимает результат запроса от Model 7. Presenter отправляет команду к ViewState
от ЖЦ View 2. Воссозданный View должен использовать тот же экземпляр Presenter'a, который использовался до воссоздания 3. View должен показывать актуальное состояние UI-логики (Presenter'a) в каждый момент времени в не зависимости от момента прикрепления к Presenter'u
от ЖЦ View 2. Воссозданный View должен использовать тот же экземпляр Presenter'a, который использовался до воссоздания 3. View должен показывать актуальное состояние UI-логики (Presenter'a) в каждый момент времени в не зависимости от момента прикрепления к Presenter'u 4. Никакого бойлерплейт-кода для этих целей
{ ... implementation 'com.arello-mobile:moxy:1.5.5' annotationProcessor 'com.arello-mobile:moxy-compiler:1.5.5' } Базовый модуль обеспечивает такие компоненты, как MvpPresenter, MvpView и т.д.
{ ... implementation 'com.arello-mobile:moxy:1.5.5' annotationProcessor 'com.arello-mobile:moxy-compiler:1.5.5' } Базовый модуль обеспечивает такие компоненты, как MvpPresenter, MvpView и т.д. Модуль компилятора генерирует код: - Для создания и инъекции MvpPresenter'a
{ ... implementation 'com.arello-mobile:moxy:1.5.5' annotationProcessor 'com.arello-mobile:moxy-compiler:1.5.5' } Базовый модуль обеспечивает такие компоненты, как MvpPresenter, MvpView и т.д. Модуль компилятора генерирует код: - Для создания и инъекции MvpPresenter'a - ViewState'a
{ ... implementation 'com.arello-mobile:moxy:1.5.5' annotationProcessor 'com.arello-mobile:moxy-compiler:1.5.5' } Базовый модуль обеспечивает такие компоненты, как MvpPresenter, MvpView и т.д. Модуль компилятора генерирует код: - Для создания и инъекции MvpPresenter'a - ViewState'a - Для инъекции ViewState'a к Presenter'u
List<User>) fun showLoadingProgress(show: Boolean) fun showLoadingError(message: String) fun navigateToUserInfo(user: User) } Интерфейс UsersView должен унаследоваться от MvpView
fun showUsers(users: List<User>) { // Отображает список юзеров } override fun showLoadingProgress(show: Boolean) { // Отображает прогресс на время загрузки списка юзеров } }
fun showUsers(users: List<User>) { // Отображает список юзеров } override fun showLoadingProgress(show: Boolean) { // Отображает прогресс на время загрузки списка юзеров } override fun showLoadingError(message: String) { // Отображает ошибку загрузки } fun navigateToUserInfo(user: User) { // Выполняет переход на экран "Инфо о юзере" } }
fun showUsers(users: List<User>) { // Отображает список юзеров } override fun showLoadingProgress(show: Boolean) { // Отображает прогресс на время загрузки списка юзеров } override fun showLoadingError(message: String) { // Отображает ошибку загрузки } fun navigateToUserInfo(user: User) { // Выполняет переход на экран "Инфо о юзере" } } В случае Activity (UsersActivity) необходимо унаследоваться от MvpAppCompatActivity
циклом Presenter • @InjectViewState • – аннотация для привязывания ViewState к Presenter • @StateStrategyType • – аннотация для управления стратегией добавления и удаления команды из очереди команд во ViewState
reference при обращении к полю viewState в презентере class UsersPresenter(private val dataManager: DataManager) : MvpPresenter<UsersView>() { override fun onFirstViewAttach() { super.onFirstViewAttach() loadUsers() } private fun loadUsers() { viewState.showLoadingProgress(true) .... } } Частые ошибки
reference при обращении к полю viewState в презентере @InjectViewState class UsersPresenter(private val dataManager: DataManager) : MvpPresenter<UsersView>() { override fun onFirstViewAttach() { super.onFirstViewAttach() loadUsers() } private fun loadUsers() { viewState.showLoadingProgress(true) .... } } Частые ошибки