我正在使用here之类的共享视图模型
但是问题是,当我清除最后一个片段时,我想清除视图模型或杀死它的实例,但是当我离开使用它的最后一个片段时,它以某种方式仍然存在
如何以编程方式清除此视图模型?
我这样使用
private val model: SharedViewModel by activityViewModels()
override fun onViewCreated() {
model.getTotal().observe(viewLifecycleOwner, Observer { cartTotal ->
total = cartTotal
})
}
我从片段B发送了总数
private val model: SharedViewModel by activityViewModels()
override fun onViewCreated() {
model.setTotal = 10
}
但是,当使用该数据保留Fragment A时(由于我正在使用导航组件,因此要执行popBackStack)不会清除视图模型,而是当我再次打开我的fragment时,数据仍然在那里
我怀疑viewmodel与我的Container Activity绑定在一起,而不是与片段本身的生命周期绑定在一起,所以
当我碰到最后一个片段时,如何删除实例或清除视图?
谢谢
答案 0 :(得分:2)
如果要获取与父片段相关联的ViewModel,则内部片段应遵循by viewModels
JavaDoc并使用:
val viewmodel: MYViewModel by viewmodels ({requireParentFragment()})
这表示将父Fragment用作ViewModel的所有者。
(父片段在访问自己的ViewModel时将使用by viewModels()
)