2017-08-09 46 views
2

我現在使用的是LiveData,他們建議使用MVVM模式設計。對於我的一些請求,我使用RxJava2,並在SubscribeWith(...)中收聽響應。例如,當我按下按鈕向遠程數據源發送一些數據時,我顯示一些加載動畫,並且想要將它隱藏在onComplete()事件(內subscribeWith(...))中。問題是我沒有從ModelView訪問視圖。如何讓視圖知道應該隱藏加載動畫?MVVM通知查看關於加載狀態

我目前的想法是在ViewModel的界面中創建並在View中實現它。但它破壞了View和ViewModel分離的概念。

回答

3

那麼你可以使用這個壽命數據:d

在您的視圖模型類,你可以創建一個實時的數據對象這樣

MutableLiveData<Boolean> isLoading = new MutableLiveData<>(); 

和例如創建一個名爲downloadFinished和通話功能它在onComplete 爲您的遠程代碼

private void downloadFinished() { 
     isLoading.setValue(true); 
    } 

在你的活動,用vi ew模型你觀察加載的價值並隱藏進度或你想要什麼

TestViewModel viewModel = ViewModelProviders.of(this).get(TestViewModel.class); 
     viewModel.isLoading.observe(this, new Observer<Boolean>() { 
      @Override 
      public void onChanged(@Nullable Boolean isLoading) { 
       if (isLoading != null) { 
        if (isLoading) { 
         // hide your progress bar 
        } 
       } 
      } 
     }); 
+1

男人,這是一個好主意!謝謝) –