在 google 示例中指出,要在 fragment 之间进行通信,您可以使用作用域为 Activity
的 ViewModel
。这种方法的问题在于,ViewModel
将持续到 Activity
被销毁。
在单个 Activity
应用程序中,这意味着 Activity 将散布着可能不再需要的 ViewModel
。如果这些 ViewModel
没有被正确清除,您也会遇到状态问题。
所以我看看如何改变 ViewModel
的生命周期,这样我就不必绑定(bind)到 Activity
生命周期,而是比生命周期更长 fragment
。这对于在屏幕流过程中满足要求的多步/事务性屏幕流非常有用。
所以基本上,我希望 ViewModel 的范围小于 Activity 但大于 fragment 。
为了实现这一点,我创建了自己的 ViewModelStore
并在整个配置中持久化它,就像 FragmentActivity
持久化它自己的 ViewModelStore
一样。然后在初始化我将使用的 View 模型时,
ViewModelProvider(myCustomViewModelStore, myFactory).get(SomeViewModelClass::class.java)
由于 ViewModel
不在我的自定义 ViewModelStore
范围内,我可以轻松调用 viewModelStore.clear()
来控制 View 模型
。
我想知道这是否是个好主意,是否有人在使用相同的想法。
提前致谢!
最佳答案
截至Navigation Component 2.1.0-aplha02 , ViewModel
现在可以通过 Navigation Component
导航图限定事务流。
关于android - 创建我自己的 ViewModelStore 来控制 ViewModel 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54937263/