我需要某种方法来传递只能从ViewModel执行一次的事件。目前,我正在为此使用LiveData。 用例:
我正在建立一些意图,然后将其分解成碎片。问题很明显,旋转后,我得到了旧数据,startAtivity再次运行。 我不想对支票等使用一些技巧。我敢肯定应该有正确的方法来做这些事情。 我找到的唯一方法是在这里:link-SingleLiveEvent。
那么,这样做是正确的方法吗? 从ViewModel传递与UI相关的事件的正确方法是什么?
答案 0 :(得分:1)
这样做是正确的方法吗?
这个问题的答案是肯定的,如果那样做的话不会泄漏任何对象,而您可能找不到合适的解决方案!。
通过以下方式传递与UI相关的事件的正确方法是什么 ViewModel?
您发现的上述解决方案在您的用例中还可以,但是如果您发现根本不涉及LiveData
的解决方案,那么我可能会指出一个方向。在下面查看解决方案:
ViewModel
具有要在UI上传递结果的异步方法。ViewModel
的异步方法上,通过结果类型的接口对象提供Activity/Fragment
和ViewModel
之间的交互,并传递 LifeCycleOwner object
和 interface object
作为方法参数。LifecycleOwner
(即此处的活动或片段实例)的生命周期事件的方法,并在用户界面上按界面提供回调。这有点设置,但是当您想要不带LiveData
的解决方案时就可以使用。