如何正确地从ViewModel传递事件?

时间:2018-11-26 12:40:16

标签: android mvvm android-architecture-components

我需要某种方法来传递只能从ViewModel执行一次的事件。目前,我正在为此使用LiveData。 用例:

我正在建立一些意图,然后将其分解成碎片。问题很明显,旋转后,我得到了旧数据,startAtivity再次运行。 我不想对支票等使用一些技巧。我敢肯定应该有正确的方法来做这些事情。 我找到的唯一方法是在这里:link-SingleLiveEvent。

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

1 个答案:

答案 0 :(得分:1)

  

这样做是正确的方法吗?

这个问题的答案是肯定的,如果那样做的话不会泄漏任何对象,而您可能找不到合适的解决方案!。


  

通过以下方式传递与UI相关的事件的正确方法是什么   ViewModel?

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

  • 假设您的ViewModel具有要在UI上传递结果的异步方法。
  • ViewModel的异步方法上,通过结果类型的接口对象提供Activity/FragmentViewModel之间的交互,并传递 LifeCycleOwner object interface object 作为方法参数。
  • 现在检查您的LifecycleOwner (即此处的活动或片段实例)的生命周期事件的方法,并在用户界面上按界面提供回调。
  • 因此,现在,一旦将结果发送到用户界面,您就可以将其标记为

这有点设置,但是当您想要不带LiveData的解决方案时就可以使用。