![](/img/trans.png)
[英]In Android (Java) can you pass a photo using LiveData and a shared ViewModel between two fragments?
[英]Using LiveData/ViewModel with Fragments?
我将首先描述我想要实现的目标:
我有一个包含片段的活动。 现在,根据一些动作,活动将调用 FragmentManager 并替换相同类型的全新片段。
在我的片段 class 中,我得到了一个关联的 ViewModel。 在 onCreateView() 片段中,我订阅了 ViewModel 中的 LiveData 组件。
我在应用程序的整个生命周期中实例化了许多片段,但如上所述,在任何给定时刻只有一个片段处于活动状态。
我的问题是,我是否保证在调用getSupportFragmentManager().replace(id, new MyFrag())
时,它将停止观察当前处于活动状态(即将被替换)的片段中 LiveData 的变化,而不是new MyFrag()
的new MyFrag()
将是唯一的观察者吗?
我的第二个要求是我需要知道在调用replace()
后何时附加片段我如何确保这一点? (注意我不想覆盖 onAttach() 我想在调用replace
后知道这一点)
编辑:我将完全描述我的用例
我需要一次初始化数据并由我的 Fragment 观察。
让我解释:
我有一个父 Activity,它有一个加载一些数据的 ViewModel。 我的 Fragment 需要此数据,并且仅在第一次创建 Fragment 时才需要。 我所做的是在我的 Fragment 中设置观察者,它只是观察父活动的 LiveData 的变化。 因此,在我创建我的片段之后,我需要初始化该数据并且只需要一次,因此我调用 function 将这些数据加载到与我的父活动关联的 VM 中。 但是由于我的片段尚未附加,因此数据只是丢失了,因为我的观察者仅在片段不仅被创建而且被附加时才开始观察。
现在您可能会说,所以只需在 Fragments ViewModel 构造函数中初始化该数据,但我不能这样做,因为它依赖于只有父活动 VM 拥有的另一条关键数据。
我希望我很清楚,任何指导都会有所帮助,谢谢!
与其在onCreateView
onCreate
进行,并使用viewLifecycleOwner
作为生命周期所有者。 这确保了当视图被销毁时,所有的观察者都被同时移除。
如果你使用this
(片段)作为生命周期所有者,观察者只会在片段被销毁时被移除。 假设您使用后堆栈,替换片段不会立即销毁它。 但是视图肯定会被破坏。
至于第二个问题,我真的不是片段生命周期方面的专家,但你可以在这里使用onCreate
或onCreateView
吗? 你是什么情况?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.