2016-04-29 4 views
0

Давайте представим ситуацию:MVP: как оповещать представление об изменениях после де-присоединять

  1. пользователь нажимает на кнопку «Login» и Fragment (View) называют метод Presenter «s doLogin().
  2. Presenter начинает асинхронную работу и теперь Boom! приложение закрыто (перемещено в недавние приложения)
  3. Presenter выживает, и асинхронная работа все еще происходит.
  4. Async работает, когда приложение было в фоновом режиме.
  5. Пользователь вернулся в приложение, но он не видит уведомление о том, как работа закончена, как был де-приложенный вид:

     if(isViewAttached()) { 
          getView().setLoaded(workResult); 
         } 
    

И я хочу, чтобы это исправить. Единственный способ, который я вижу, - использовать Queue<MessageToView>, и когда View снова подключился, выполните каждое «Сообщение».

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

ответ

1

См GitHub страницы FAQ раздела:

Может Presenter и его вид быть синхронизированы во время экрана изменения ориентации ?

Отличный вопрос. Мосби предполагает, что все взаимодействие с Presenter с представлением происходит в основном потоке пользовательского интерфейса Android. Следовательно, ответ нет, что не может произойти, так как изменения ориентации экрана выполняются на основной теме пользовательского интерфейса. Таким образом, либо выполняется ориентация экрана, выполненная , либо ведущий вызывает метод просмотра после того, как представление повторно подключено, поскольку оба запускаются в основном потоке пользовательского интерфейса, или презентатор вызывает методы просмотра перед началом ориентации экрана .

До тех пор, пока ваш докладчик вызывает методы просмотра в основной теме пользовательского интерфейса, все работает из коробки.

1

Попробуйте использовать onResume() метод жизненного цикла фрагмента, а затем вызвать что-то вроде presenter.updateViews()

+0

Спасибо, что поделились своей идеей, но я хочу обновить View, только если это необходимо, причем не каждый раз, когда Fragment возобновляется. 'Queue ' является более элегантным решением для этого случая. Потому что там я могу проверить 'if (! Queue.isEmpty()) {* update_view_swith_messages (Runnable) _}' Но я ищу библиотеку, которая делает ее еще более элегантной :) – Alexandr

 Смежные вопросы

  • Нет связанных вопросов^_^