2017-07-28 59 views
0

我正在嘗試學習&在我的應用中實現帶有數據綁定的MVVM。但我在理解/決定一些事情上面臨困難。帶有上下文的Android MVVM數據模型

我有我的應用程序,我需要在多個活動中使用一個標題視圖,所以我基本上創造了這個

view_header.xml 
HeaderViewModel.java (implements java.util.Observer) 
HeaderDataModel.java (extends java.util.Observable) 

其中HeaderViewModel綁定了view_header.xml。 現在我包括來自XyzActivity像這樣在view_header.xmlactivity_xyz.xml &組視圖模型的頭查看,

xyzViewBinding.setHeaderVm(new HeaderViewModel(new HeaderDataModel(mContext))); 

現在我必須在此基礎上的問題:

1)由於HeaderDataModel需要上下文中SharedPreference &工作BroadcastReceiver,我初始化它在XyzActivity而不是HeaderViewModel - 這是正確的方法嗎?

2)我不得不依靠廣播接收器來更新我的標題視圖,所以我在HeaderDataMode的構造函數中註冊它。現在我的HeaderDataModelObservable,每當我收到廣播時,我都會呼叫notifyObservers(),以便觀察者(HeaderViewModel)檢測到它&更新它的視圖.-這是正確的方法嗎? 3)當我在HeaderDataModel的構造函數中註冊接收者時,我在數據模型中創建了onDestroy()方法,我在其中取消註冊&我從XyzActivity的onDestroy()調用此onDestroy。

回答

0
  1. 作爲HeaderDataModel需要上下文中SharedPreference &廣播接收器的工作,我初始化它XyzActivity代替HeaderViewModel-裏面這是正確的做法? - 不,這是錯誤的。你必須在HeaderDataModel中初始化它,所以如果你想更新HeaderDataModel,你可以很容易地做到。
  2. 我不得不依靠廣播接收器來更新我的標題視圖,所以我在HeaderDataMode的構造函數中註冊它。現在,由於我的HeaderDataModel是Observable,所以無論何時接收廣播,我都會調用notifyObservers(),以便觀察者(HeaderViewModel)檢測到它。&更新它的視圖。這是正確的方法嗎? - 是的,就像我在第一點講的那樣。
  3. 當我在HeaderDataModel的構造函數中註冊接收器時,我在數據模型中創建了onDestroy()方法,我在其中註銷它&我從XyzActivity的onDestroy()調用此onDestroy。 - 是的。在HeaderDataModel類中公開ondestroy()方法。
+0

我想你的意思是我必須在HeaderViewModel中初始化它。但作爲HeaderDataModel構造函數需要上下文,爲了從ViewModel初始化它,我需要上下文。所以這不是針對主體,ViewModel不應該引用任何的Android API或類?這就是爲什麼我在Activity中初始化它並將其傳遞給ViewModel,以便ViewModel可以修改/使用它。 –