带有Context的Android MVVM DataModel

时间:2017-07-28 06:57:09

标签: android mvvm

我正在努力学习&在我的应用程序中使用数据绑定实现MVVM。但是我在理解/决定一些事情方面遇到了困难。

我的应用程序中有一个标题视图,我需要在多个活动中使用,所以我基本上创建了这个

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

其中HeaderViewModelview_header.xml绑定。 现在,我将view_header.xml添加到activity_xyz.xml&从XyzActivity这样设置标题视图的ViewModel,

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

现在我有基于此的问题:

1)由于HeaderDataModel需要使用上下文来处理SharedPreference& BroadcastReceiver,我在XyzActivity而不是HeaderViewModel内初始化它 - 这是正确的做法吗?

2)我不得不依赖广播接收器来更新我的标题视图,所以我在HeaderDataMode的构造函数中注册了它。现在我的HeaderDataModelObservable,每当我收到广播时,我都会调用notifyObservers(),以便观察者(HeaderViewModel)检测到它&更新它的视图.-这是正确的方法吗?

3)当我在HeaderDataModel的构造函数中注册接收器时,我在数据模型中创建了onDestroy()方法,在此我取消注册它&我从XyzActivity的onDestroy()中调用了这个onDestroy。这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

  1. 由于HeaderDataModel需要使用上下文来处理SharedPreference& BroadcastReceiver,我在XyzActivity中初始化它而不是HeaderViewModel-这是正确的方法吗? - 不,这是错的。您必须在HeaderDataModel中初始化它,以便稍后如果您想要更新HeaderDataModel,您可以轻松地执行此操作。
  2. 我不得不依赖广播接收器来更新我的标题视图,所以我在HeaderDataMode的构造函数中注册了它。现在,因为我的HeaderDataModel是Observable,每当我收到广播时,我都会调用notifyObservers(),以便观察者(HeaderViewModel)检测到它&更新它的视图.-这是正确的方法吗? - 是的,正如我在第一点所说的那样。
  3. 当我在HeaderDataModel的构造函数中注册接收器时,我在数据模型中创建了onDestroy()方法,在此我取消注册它&我从XyzActivity的onDestroy()调用这个onDestroy。这是正确的方法吗? - 是的。在HeaderDataModel类中公开ondestroy()方法。