我正在尝试在我的应用中学习和实现带有数据绑定(bind)的MVVM。但是我在理解/决定一些事情方面面临困难。

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

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

其中HeaderViewModelview_header.xml绑定(bind)。
现在,我将view_header.xml包括在activity_xyz.xml中,并像这样从XyzActivity设置Header View的ViewModel,
xyzViewBinding.setHeaderVm(new HeaderViewModel(new HeaderDataModel(mContext)));

现在我有以下问题:

1)由于HeaderDataModel需要上下文才能与SharedPreferenceBroadcastReceiver一起使用,因此我在XyzActivity而不是HeaderViewModel中对其进行了初始化-这是正确的方法吗?

2)我必须依靠广播接收器来更新我的 header View ,因此我在HeaderDataMode的构造函数中注册了它。现在因为我的HeaderDataModelObservable,所以每当我收到广播时,我都会调用notifyObservers(),以便观察者(HeaderViewModel)检测到它并更新它的 View 。-这是正确的方法吗?

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

最佳答案

  • 因为HeaderDataModel需要上下文才能与SharedPreference和BroadcastReceiver一起使用,所以我在XyzActivity中而不是HeaderViewModel内初始化了它-这是正确的方法吗? -不,这是错误的。您必须在HeaderDataModel中对其进行初始化,因此,如果以后要更新HeaderDataModel,则可以轻松实现。
  • 我必须依靠广播接收器来更新我的 header View ,因此我在HeaderDataMode的构造函数中注册了它。现在由于HeaderDataModel是可观察的,因此每当我收到广播时,我都会调用notifyObservers(),以便观察者(HeaderViewModel)检测到它并更新它的 View 。-这是正确的方法吗? -是的,正如我在第一点所述。
  • 我在HeaderDataModel的构造函数中注册接收者时使用
  • ,我在数据模型内部创建了onDestroy()方法,并在其中注销了它,并通过XyzActivity的onDestroy()将此方法称为onDestroy。-这是正确的方法吗? -是。在HeaderDataModel类中公开ondestroy()方法。
  • 关于android - 带有上下文的Android MVVM DataModel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45366819/

    10-11 00:13