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