android - 如何将 View 模型范围限定为父 fragment ?

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

所以我正在使用新的导航组件(采用单一 Activity 原则)并使用共享 View 模型在每个 fragment 之间进行通信,但是,我已经到了有时需要清除 View 模型但我可以找个好地方清除它。但是说实话,我认为与其自己尝试清除它,我真的应该让框架为我做这件事,但这并不是因为 View 模型是共享的,并且适用于 Activity ,但我认为我可以将它们的范围限定为一个父 fragment ,我画了一幅图来说明我想做什么。 my navigation flow所以我只想在我从“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/

相关文章:

android - 如何为我的 Android 应用创建全局高分?

Android:Asus Nexus 7 在重启之前不会提交模拟内存

android - 如果没有@Provides注释的方法,则无法提供Dagger/MissingBinding androidx.lifecycle.ViewModelProvider.Factory

java - Android xml 属性等价于 Java 代码

android - Mockito/电源 Mockito : unable to get expected output when mocking method of LayoutParams in android

android - 当另一个 fragment 位于顶部时,主机 fragment 接收触摸事件

Android 更改 PreferenceFragment 的对话框内容

android - 无法从 Android Firebase 数据库接收字符串

wpf - 具有模型类型和自动创建 ViewModel 的自定义 DependencyProperty

c# - 简单的 MVVM 工具包 - 切换时丢失 ViewModel