所以我正在使用新的导航组件(采用单一 Activity 原则)并使用共享 View 模型在每个 fragment 之间进行通信,但是,我已经到了有时需要清除 View 模型但我可以找个好地方清除它。但是说实话,我认为与其自己尝试清除它,我真的应该让框架为我做这件事,但这并不是因为 View 模型是共享的,并且适用于 Activity ,但我认为我可以将它们的范围限定为一个父 fragment ,我画了一幅图来说明我想做什么。 所以我只想在我从“Child 1 Child a”导航回来时清除 2 个 View 模型,目前 View 模型永远不会被清除,试图通过在 fragment 中调用“this”来获取当前 View 模型,而在 child 中调用 getParentFragment 则不会'工作,任何人都可以提供一个例子吗?
编辑
看起来我已经在做类似的事情,但它在我的情况下不起作用,所以我将添加一些代码,这是我如何访问父 fragment 中的第一个 View 模型
model = ViewModelProviders.of(this).get(RequestViewModel.class);
然后在子 fragment 中,我这样做
requestViewModel = ViewModelProviders.of(getParentFragment()).get(RequestViewModel.class);
但它并没有在它们之间保留数据,它们都附加了观察者
最佳答案
使用 Fragment-ktx libr 在您的应用程序中,您可以获得如下的 viewModel 在你的应用-> build.gradle
implementation 'androidx.fragment:fragment-ktx:1.1.0'
//获取ParentFragment中的ViewModel as
private val viewModel: DemoViewModel by viewModels()
//在 ChildFragment 中获取与 ViewModel 相同的实例
private val viewModel: DemoViewModel by viewModels(
ownerProducer = { requireParentFragment() }
)
关于android - 如何将 View 模型范围限定为父 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53817046/