首页 > 解决方案 > 如何从 ViewModel 正确传递事件?

问题描述

我需要一些方法来传递应该只从 ViewModel 完成一次的事件。目前,我正在为此使用 LiveData。用例:

我正在建立一些意图,然后我应该将其交付给片段。问题很明显,旋转后,我得到旧数据并再次运行 startAtivity。我不想在支票等方面使用一些技巧。我相信应该有正确的方法来做这些事情。我找到的唯一方法是:链接- SingleLiveEvent。

那么,这是做这些事情的正确方法吗?从 ViewModel 传递 UI 相关事件的正确方法是什么?

标签: androidmvvmandroid-architecture-components

解决方案


这是做这些事情的正确方法吗?

这个问题的答案是肯定的,如果这样做没有泄漏任何对象,那么您可能已经找到了正确的解决方案!


从 ViewModel 传递 UI 相关事件的正确方法是什么?

您发现上述解决方案在您的用例中是可以的,但是如果您找到一个根本不涉及的解决方案,那么LiveData我可能能够将其指向一个方向。查看以下解决方案:

  • 假设您ViewModel有一个要在 UI 上传递结果的异步方法。
  • 获取您的结果类型的接口对象,该对象提供您的ViewModel&之间的交互Activity/Fragment,在您的异步方法上从ViewModel传递您的LifeCycleOwner objectinterface object作为方法参数。
  • 现在检查您的生命周期事件的方法LifecycleOwner (即此处的活动或片段实例),并通过 UI 上的接口提供回调。
  • 因此,现在您可以将结果标记为null一旦交付给 UI。

这是一些设置,但是当您需要没有LiveData.


推荐阅读