2016-04-29 53 views
0

讓我們想象一下情況:MVP:如何通知有關更改視圖後去重視

  1. 用戶點擊「登錄」按鈕,FragmentView)調用Presenter的方法doLogin()
  2. Presenter啓動一些異步工作,現在熱潮!應用程序已關閉(移至最近的應用程序)
  3. Presenter存活並異步工作仍在進行中。
  4. 異步工作完成,而應用程序在後臺。
  5. 用戶回來的應用程序,但他沒有看到的觀點去連接,工作是完成任何通知:

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

而且我要修復它。我看到的唯一方法是使用Queue<MessageToView>,並且當再次附加View時,執行每個「消息」。

我認爲有一個圖書館可以處理我的情況。那麼,是嗎?或者我可以使用什麼樣的模式?

回答

1

見GitHub的網頁FAQ部分:

演示和視圖可以是不同步的屏幕 方向變化時?

優秀的問題。 Mosby認爲Presenter 與View的所有交互都發生在Android的主UI線程上。因此,答案是 不可能發生,因爲屏幕方向更改也在主UI線程上執行 。因此,無論是一個屏幕方向完全執行 (視圖重新連接)或由於在主UI線程都運行視圖重新連接或 呈現調用起始屏幕取向 改變之前的觀點方法後演示調用視圖方法 。

因此,只要您的Presenter調用主UI線程上的View方法,所有的東西都可以直接使用。

1

嘗試使用碎片的onResume()生命週期的方法,然後再調用像presenter.updateViews()

+0

感謝您分享您的想法,但我想只在需要時更新View,而不是每次Fragment恢復。對於這種情況,'Queue '是更優雅的解決方案。因爲在那裏我可以檢查'if(!queue.isEmpty()){* update_view_swith_messages(Runnable)_}'但是我在尋找一個更好的圖書館:) – Alexandr