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

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

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

最佳答案



对这个问题的答案是肯定的,如果这样做可以在不泄漏任何对象的情况下完成工作,而您可能找不到合适的解决方案!。



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

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

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

    关于android - 如何从ViewModel正确传递事件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53481336/

    10-12 00:26
    查看更多