我正在使用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())

10-07 12:03
查看更多