2017-02-13 1 views
0

Я создаю приложение для Android с использованием архитектуры MVP. Я создал классы Presenter и Interactor. Я пытаюсь обновить интерфейс, когда приложение находится в фоновом режиме и возвращается на передний план.Как обновить интерфейс для получения обратного вызова, когда приложение находится в фоновом режиме?

Рассмотрим следующий сценарий.

Кнопка на интерфейсе пользователя нажата, и ведущий уведомляется об этом. Ведущий попросил Interactor предоставить данные из бэкэнд. К тому времени, когда Interactor предоставляет результат для презентатора, как-то пользовательский интерфейс находится в фоновом режиме. Как сохранить состояние и изменить компоненты пользовательского интерфейса, когда приложение находится на переднем плане.

Я пытался делать следующие вещи:.

  1. Использование флагов (включите флаг и проверить в onResume вызвать метод, который должен быть вызван, когда обратный вызов получен, но проблема в том, что, скажем, если у меня есть 5 различные услуги, которые могут быть вызваны ведущей, который имеет другую функцию обратного вызова, то я буду требовать 5 флагов, которые я не люблю его)
  2. Использования JAVA отражение (STORE имени методы вызываться в HashMap с параметром)

Есть ли лучше wa y для достижения этого?

+0

Подписаться на BehaviorRelay или реактивной базы данных, которая дает вам ответ, который имеет отношение к вашему в настоящее время отображаются данные в любое время вы подписались в исходное состояние или будущие изменения – EpicPandaForce

+0

@EpicPandaForce вы можете поделиться любой пример? – Rahil2952

ответ

0

Вы можете добавить «Pause» логику вашего ведущий:

  • Всякий раз, когда пользовательский интерфейс идет в фоновый режим, вы говорите выступающий «пауза» и сохранить любые данные, которые получены в кэш (может быть так же просто, как список внутри вашего презентатора).
  • Всякий раз, когда пользовательский интерфейс возвращается на передний план, вы сообщаете своему презентатору о необходимости и выгружаете его кеш в пользовательский интерфейс (если список кеша не равен нулю, он подталкивает его к пользовательскому интерфейсу, как обычный ответ, полученный вашим интерактором)
0

Как имя MVP Предлагает Модель View Presenter Модель: Модель отвечает за методы установки геттера, также известные как POJO. Вид: Содержит действия/фрагменты с видами. Докладчик: Фактическая бизнес-логика, в которой вы можете связывать сетевые вызовы ИЛИ связываться с базами данных, такими как SQLite/MySql.

При нажатии кнопки вам нужно позвонить ведущему, который выполнит фоновые задачи после того, как это будет сделано, вам необходимо уведомить ваше мнение о том, что ответ - это Успех/Сбой через CallBacks, который выполняется с помощью интерфейсов.

Пример:

interface BaseContract { 
     interface BaseView { 
      //Methods for View 
      void onDoSomething(); 
     } 

     interface BasePresenter { 
      void doSomething(); 

     } 
    } 

    class BaseMainPresenter implements BaseContract.BasePresenter { 
     BaseContract.BaseView view; 

     BaseMainPresenter(BaseContract.BaseView view) { 
      this.view = view; 
     } 

     @Override 
     public void doSomething() { 
      if (view != null) 
       view.onDoSomething(); 
     } 
    } 

    class DemoClass implements BaseContract.BaseView { 

     //Create object of Presenter 

     /**** 
     * Example : 
     * BaseMainPresenter baseMainPresenter = new BaseMainPresenter(this); 
     */ 
     @Override 
     public void onDoSomething() { 
      //Deal with Context here. 
     } 
    } 
Смежные вопросы