温馨提示:本文翻译自stackoverflow.com,查看原文请点击:android - Shared viewModel achived fragment lifecycle
android android-architecture-components viewmodel

android - 共享viewModel实现片段生命周期

发布于 2020-03-27 10:18:16

如何在没有活动的情况下将共享viewModel与片段一起使用?类似于代码,但代替requireActivity()使用ParentFragment。在这种情况下,当ParentFragment将被销毁时,将清除SharedViewModel,但是当我从活动中提供SharedViewModel时,ParentFragment被销毁时不会将其清除。

我使用导航组件,这意味着我无法为片段设置标签,然后使用findFragmentByTag()


class ParentFragment:Fragment{

    override fun onCreate(savedInstanceState: Bundle?) {
      var viewModel = ViewModelProviders.of(requireActivity()).get(SharedViewModel::class)
    }
}

class ChildFragment:Fragmnet{
   override fun onCreate(savedInstanceState: Bundle?) {
      var viewModel = ViewModelProviders.of(requireActivity()).get(SharedViewModel::class)
    }

}


查看更多

查看更多

提问者
Alexander Kazantsev
被浏览
263
dhabensky 2019-07-09 14:27

您可以尝试scoped-vm-它允许您请求ViewModel以获取由String键标识的范围范围一直存在,直到销毁请求ViewModel的最后一个片段,然后清除ViewModel。

您可以使用此代码在ParentFragment和ChildFragment中获取SharedViewModel。

ScopedViewModelProviders
     .forScope(this, "scope")
     .of(requireActivity())
     .get(SharedViewModel::class.java)