带有上下文的 Android MVVM 数据模型

标签 android mvvm

我正在尝试在我的应用程序中学习和实现带有数据绑定(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.xmlactivity_xyz.xml & 从中设置标题 View 的 ViewModel XyzActivity像这样,
xyzViewBinding.setHeaderVm(new HeaderViewModel(new HeaderDataModel(mContext)));

现在我有基于此的问题:

1) 作为HeaderDataModel需要上下文才能使用 SharedPreference & BroadcastReceiver ,我在XyzActivity里面初始化它而不是 HeaderViewModel - 这是正确的方法吗?

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

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

最佳答案

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

    相关文章:

    android - 未找到 ID 为 'com.google.firebase.appdistribution' 的插件

    c# - 用Catel关闭窗口

    wpf - 如何以编程方式使用EventTrigger和InvokeCommandAction?

    WPF如何将混合交互触发器添加到样式资源

    c# - 如何将 2 个密码框作为命令参数传递给命令?

    wpf - 添加选项卡时,TabControl 的 SelectedItem 被 NewItemPlaceholder 覆盖

    android - 如何创建 EAN13 条形码生成器,将 EAN 作为输入?

    Java .contains() 的行为不符合我的预期

    android - 如何在android中获取所有 View fragment ?

    java - 滑动刷新后加载更多不起作用