弹出片段时未清除SharedViewModel

时间:2020-03-15 21:25:17

标签: android android-fragments kotlin android-viewmodel android-architecture-navigation

我正在使用here之类的共享视图模型

但是问题是,当我清除最后一个片段时,我想清除视图模型或杀死它的实例,但是当我离开使用它的最后一个片段时,它以某种方式仍然存在

如何以编程方式清除此视图模型?

我这样使用

片段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)不会清除视图模型,而是当我再次打开我的fragment时,数据仍然在那里

我怀疑viewmodel与我的Container Activity绑定在一起,而不是与片段本身的生命周期绑定在一起,所以

当我碰到最后一个片段时,如何删除实例或清除视图?

谢谢

1 个答案:

答案 0 :(得分:2)

如果要获取与父片段相关联的ViewModel,则内部片段应遵循by viewModels JavaDoc并使用:

val viewmodel: MYViewModel by viewmodels ({requireParentFragment()})

这表示将父Fragment用作ViewModel的所有者。

(父片段在访问自己的ViewModel时将使用by viewModels()