如何在没有活动的情况下将共享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)
}
}
您可以尝试scoped-vm-它允许您请求ViewModel以获取由String键标识的范围。范围一直存在,直到销毁请求ViewModel的最后一个片段,然后清除ViewModel。
您可以使用此代码在ParentFragment和ChildFragment中获取SharedViewModel。
ScopedViewModelProviders
.forScope(this, "scope")
.of(requireActivity())
.get(SharedViewModel::class.java)
是的,这正是需要的。谢谢